XL 2010 lire le contenu d'une cellule et convertir en fonction de ce contenu

overcraft

XLDnaute Nouveau
Bonjour à tous


A peine inscrit sur le site, je sollicite déjà votre aide pour un petit problème VBA.


J’ai besoin de lire la valeur dans les cellules de la colonne A, de convertir ces valeurs et de les retranscrire dans la colonne B.


Dans la colonne A de ma feuille « Equipment » je vais avoir les valeur ci-dessous :

500A

500A+3.5

500A +10

500B

727E

727E + 10

Etc…


500A correspond à la valeur 440

500B correspond à la valeur 460

727E correspond à la valeur 827


Si il y a un + (par exemple 500A + 10) la valeur sera « 440 + 10 » et j’aurais dans ma colonne B « 450 ».


Merci par avance de l’aide que vous pourrez m’apporter.
 

Paf

XLDnaute Barbatruc
Bonjour overcraft, gosselien, Jocelyn,

deux essais VBA :
Edit: ces deux codes ne fonctionne que si les cellules de la colonne A commence par le code suivi ( ou non) d'une seule opération d'addition

1) une fonction personnalisée :
en B2 : =Decode(A2) à tirer vers le bas

dans un module standard:
Code:
Function Decode(Cellule)
Dim Dico, Tmp, Tablo
Set Dico = CreateObject("Scripting.Dictionary")
Tablo = Range("K3:L11")
For i = LBound(Tablo) To UBound(Tablo)
    Dico(Tablo(i, 1)) = Tablo(i, 2)
Next
Tmp = Split(Cellule, "+")
If UBound(Tmp) > 0 Then
    Decode = Dico(Trim(Tmp(0))) + Val(Replace(Trim(Tmp(1)), ",", "."))
Else
    Decode = Dico(Trim(Tmp(0)))
End If
End Function


2) une macro globale :

VB:
Sub SommCode()
Dim Dico, Tmp, Tablo
Set Dico = CreateObject("Scripting.Dictionary")
Tablo = Worksheets("Sheet1").Range("K3:L11")
For i = LBound(Tablo) To UBound(Tablo)
    Dico(Tablo(i, 1)) = Tablo(i, 2)
Next
For i = 2 To Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
    Tmp = Split(Cells(i, 1), "+")
    If UBound(Tmp) > 0 Then
        Cells(i, 3) = Dico(Trim(Tmp(0))) + Val(Replace(Trim(Tmp(1)), ",", "."))
    Else
        Cells(i, 3) = Dico(Trim(Tmp(0)))
    End If
Next
End Sub


j'aurais voulu utiliser:
Cells(i, 3) = Dico(Trim(Tmp(0))) + IIf(UBound(Tmp) > 0, Val(Replace(Trim(Tmp(1)), ",", ".")), 0)
ou l'équivalent pour la fonction, mais j'ai l'erreur "L'indice n'appartient pas à la sélection".
Si quelqu'un a une explication ...

A+
 

eriiic

XLDnaute Barbatruc
Bonjour,

j'aurais voulu utiliser:
Cells(i, 3) = Dico(Trim(Tmp(0))) + IIf(UBound(Tmp) > 0, Val(Replace(Trim(Tmp(1)), ",", ".")), 0)

Avec Iff les 2 expressions résultats sont systématiquement évaluées.
Ca plante donc sur Tmp(1) pour UBound(Tmp) = 0, en plus de la perte de temps à tout évaluer pour un seul qui sert (peut-êtr à éviter sur les fonctions gourmandes).

eric
 
Dernière édition:

Paf

XLDnaute Barbatruc
Bonjour et merci eriiiic ( attention à ne pas se tromper dans le nombre de i !!!)

Pour la citation, dans le bandeau de réponse : icône Insérer , choix Citer

edit: ou en cliquant sur répondre du message concerné

A+
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 963
Messages
2 093 996
Membres
105 906
dernier inscrit
aifa