Pb Do..Loop VBA Excel

bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010 - 24 févr. 2009 à 16:22
bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010 - 24 févr. 2009 à 19:27
Bonjour,

Je suis débutant sur VBA. Je suis entrain de travailler sur une petite macro afain d'automatiser de la saisie de données sous Excel 2003.

La problématique est très simple, en function de ce qu'il y a dans une cellule, je dois rentrer une info dans la cellule voisine, et ainsi de suite pour toute une colonne. Les données a rentrer sont répétitives.

J'ai donc saisi une fonction If...then..Else if comme ceci:
If Range("G2") "STONYKARB" Then Range("H2") "ARB01"
ElseIf Range("G2") "IXOPROGLO" Then Range("H2") "IXOPR"

Une fois une de ces deux conditions remplies, je souhaiterai aller à la ligne, cad à la cellule "G3" et recommencer l'opération jusqu'a la dernière cellule de mon tableau

J'avais donc envisager utiliser la fonction Do...Loop Until

Afin d'aller a la ligne la fonction Offset. La première ebauche de ma macro donnerait cela:

Dim Range As String

Do
If Range("G2") "STONYKARB" Then Range("H2") "ARB01"
ElseIf Range("G2") "IXOPROGLO" Then Range("H2") "IXOPR"

Range("G2").Offset(1, 0).Activate

Loop Until IsEmpty(Range("G65536").End(xlUp).Select)

End Sub

Je suis peut-etre (surement!) à coté de plaque...j'ai 2-3 livres VBA pr Excel malheureusement je n'y trouve pas mon bonheur.

En tout cas si jamais vous avez une indication/conseil à me donner ca serait top!!

Merci par avance!

Bastien

5 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 févr. 2009 à 16:34
"ton bonheur" se trouve surement dans ces livres.

pour faire simple, on pourrait faire :

Sub Test()
Dim oRange As Range
Dim sResult As String
Set oRange = Range("G2")
Do While LenB(oRange.Text)
If oRange.Text = "STONYKARB" Then
sResult = "ARB01"
ElseIf oRange.Text = "IXOPROGLO" Then
sResult = "IXOPR"
Else
sResult = vbNullString
End If
oRange.Offset(, 1).Value = sResult
Set oRange = oRange.Offset(1)
Loop
End Sub
bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010
24 févr. 2009 à 16:57
Super merci :d ! ca marche parfaitement!
cest rageant de voir comment en qq secondes on peut débloquer un problème que j'ai depuis qq semaines!

Dernière question, est-il possible de demander à VBA de seulement analyser les 6 premières lettres d'une chaine de caractere, sans tenir compte de ce que j'ai après?

Par exemple en cellule G2, je vais avoir par exemple IXOPROGLO, mais il est possible que j'ai IXOPROGLL.
Ce problème peut survenir pour une centaine de valeur. 

J'ai surtout des problèmes dans la définition des variables, et malheureusement les livres ne sont pas (à mon gout tjs tres clair)...cela dit c'est en faisant des erreurs qu'on apprend!

En tout cas encore merci!!!

Bastien
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
24 févr. 2009 à 19:08
Salut
Pour cela, remplace ElseIf oRange.Text "IXOPROGLO"Then par ElseIf Left(oRange.Text,6) "IXOPRO" Then


Amicalement
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
24 févr. 2009 à 19:12
Oui, en utilisant la fonction "Left"
Ex:
maChaineTronquee = Left ( maChaineEntiere, 6 )
c'est tout
Salut
CNTJC

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bastien0675 Messages postés 16 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 12 août 2010
24 févr. 2009 à 19:27
Merci bcp pour votre aide!

Ca marche parfaitement!
Rejoignez-nous