Comprendre les boucles VBA :s

Bonjour à tous,

Je suis nouvelle sur le forum et je me suis mis à VBA très récemment (il y a quelques semaines). Ce n'est absolument pas dans mon champ de compétence, et j'ai essayé de trouver une solution à mes questions via les Tutos et le Forum, mais il me manque quelque chose et je n'arrive pas à comprendre quoi ...

J'ai réussi à créer la fonction dont j'ai besoin et en y insérant des variables pour simplifier le code. Ma volonté étant qu'en fonction du choix de l'école dans le colonne A2 cela m'indique automatiquement la ville en colonne B2. Jusque là pas de soucis.

Là où ça se corse, c'est que j'aimerais que cela puisse se faire pour toute la colonne A et que les villes s'affichent pour toute la colonne B (en fonction du choix de l'école dans chaque cellule, A2 pouvant être similaire ou différente de A3,A4,A5,etc ...). J'ai bien compris qu'il me faut pour ça une boucle, mais il y a quelque chose que je ne comprend pas puisque lorsque j'intègre ma fonction à ma boucle il ne trouve soit plus le début de la boucle ("do until", soit plus la fin "loop"). Je vous joins le second tableau avec mes essaie de boucle et d'autre tests pour essayer de trouver la solution à mon casse tête soyez indulgents s'il vous plaît ^^.

Voilà comment j'essaie d'intégrer la boucle, je me doute que l'erreur vient de là ...

Sub test1() 'IF et OR qui fonctionne sans liste déroulante...

'insertion des variables ECOLES et VILLES (AS String, car = teste)
Dim ECOLES As Variant
Dim VILLES As Variant
Dim Lignefin As Long
'Dim I As Variant
'Dim C As Variant
Dim rien As Variant
'Dim LigneA As String
'Dim LigneB As String

rien = ""

'ligne sur laquelle les données commencent à se renseigner (voir si utile, pas sur ...)
'C = Range("a2")
'I = Range("B2")

'définit la dernière ligne sur laquelle il y aura des données à analyser
Sheets("Feuil1").Select
Range("A200").Select
    Selection.End(xlUp).Select

'sera égale à la valeur de la ligne de la cellule sélectionnée
'Lignefin = ActiveCell.Row

'Définition de la valeur des variables
ECOLES = Sheets("Feuil1").Range("a:a")
VILLES = Sheets("Feuil1").Range("b:b")

For Each ECOLES In Selection
Next ECOLES

Do Until ECOLES = rien

If ECOLES = "L.AUBRAC" Or ECOLES = "JDL.FONTAINE" Then
    'si vrai
    VILLES = "Vitrolles"

    'Code d'origine pour me rappeler les simplifications apportées
ElseIf ECOLES = "FONTINELLES" Or ECOLES = "GUYNEMER" Then
    'si vrai
    VILLES = "13700 Marignane"

ElseIf ECOLES = "D.CASANOVA" Or ECOLES = "Joliot CURIE" Then
    'si vrai
    VILLES = "13500 BERRE"

Else: ECOLES = rien
    'si faux

Loop
 MsgBox ("ERREUR DONNEE !")

End If
End Sub

Merci d'avance pour vos retours et idées.

Lucie.

Bonjour Lucie,

ceci ne fait rien car il n'y a pas d'instruction à l'intérieur de la boucle

For Each ECOLES In Selection
' mettre ici les instructions
Next ECOLES

Do Until ECOLES = rien
' mettre ici les instructions, y compris l'incrément sur la ligne qui détermine ECOLES
Loop

Quand tu écris

Range("A200").Select
    Selection.End(xlUp).Select

puis

For Each ECOLES In Selection

il faut savoir que ta sélection ne concerne que la dernière valeur et non toutes les valeurs

Bonjour Ptite_Lue,
Je te propose de s'intéresser tout d'abord à ton modèle.
Suggestion : ajouter une colonne C dans la feuille de calcul ECOLES et compléter chaque ligne avec le nom de la ville dans laquelle est située l'école.
Dans Feuil1, colonne B en B2 :

=RECHERCHEV(A2;ECOLES!$B$1:$C$63;2;FAUX)

Sinon dans ton code, il existe beaucoup d'erreurs de débutant :
* on évite d'inscrire des valeurs dans le code : "L.AUBRAC",
* quand on se propose de faire une boucle on indique le travail à faire entre le début et la fin plutôt que du vide.

For Each ECOLES In Selection
Next ECOLES

Bon courage
Christian

Quand tu écris

Range("A200").Select
    Selection.End(xlUp).Select

puis

For Each ECOLES In Selection

il faut savoir que ta sélection ne concerne que la dernière valeur et non toutes les valeurs

Je reviens sur la sélection ... il faudrait écrire

Lignefin = Range("A" & Rows.Count).End(xlUp).Row
Range("A2:A" & Lignefin).Select

For Each ECOLES In Selection

' ton code ici

Next

dans ce cas tu sélectionnes bien toute la colonne renseignée

attention qu'ici ECOLES est donc une cellule (range)

Bonjour Steelson et Xuard,

Déjà vraiment merci BEAUCOUP pour votre réactivité et les réponses que vous m'avez apporté.

J'aurais bien aimé vous écrire une fois la solution trouvée, mais je n'ai actuellement pas le temps nécessaire pour essayer vos propositions à mon travail et chez moi je n'ai pas Excel ...

Peut-être que l'erreur vient de l’absence de l'incrément dans la boucle, je vais essayer vos différentes propositions dés que possible en tous cas.

Xuard et oui étant débutante je fais des erreurs de débutante ^^. J'avoue que je ne comprend pas pourquoi il faut éviter d'écrire des valeurs au sein du code, c'est ce qui explique aussi que je n'ai pas cherché à les enlever ^^.

Je vous remercie encore beaucoup tous les deux pour votre aide c'est vraiment gentil d'avoir pris ce temps. Je vous tient informé si j'arrive à réaliser ma boucle :).

Rechercher des sujets similaires à "comprendre boucles vba"