Forum Clubic

[Vb Excel] Boucle For - Besoin d'aide

Bonjour j,ai un petit probleme,
Je veux faire une boucle for qui cherche dans un autre feuille (Banque_Sortes), la valeur dans ma liste déroulant (liste_grades1),une fois trouvé, je dois savoir sur quelle ligne je suis positionné, et je dois aller chercher les valeur des colonnes suivante.
Exemple : Je choisi une valeur dans ma liste déroulante, lorsque mon choix est fait, la recherche dans la seconde feuille se lance, une fois la valeur trouvée dans la feuille (Ax), je dois aller chercher les valeur (Bx et Cx) pour les copier dans des cellules principales (F14 et G14) de ma feuille de travail.
Donc j’aimerais avoir de l’aide pour réussir ma recherche, trouver mes valeur de Bx et Cx et les copier dans les cellules (F14 et G14) de ma feuille principale (Atelier_Calcul)

Voila mon code pour la recherche:
For Each c In [A2:A65000]
If c.Text = liste_grades1.Text Then
Range("F14").Value = Valeur du Bx
Range("G14").Value = Valeur du Cx
Exit For
End If
Next

J’ai trouvé cette partie de code sur Internet, mais la valeur ‘c.Text’ est toujours vide donc la boucle n’abouti jamais.
J’aimerais avoir de meilleur conseil pour m’éclairer sur ce problème.
Je suis disons très débutant en Vb Excel :slight_smile:

Merci bien d’avance

Avec ce code cela devrait fonctionner.

Sub Maj()
Recherche = Range("B2").Value
For Each C In Range("Banque_Sortes!A2:A1000")
If Recherche = C.Value Then
Ligne = C.Row
Range("F14").Value = Range("Banque_Sortes!B" & Ligne).Value
Range("G14").Value = Range("Banque_Sortes!C" & Ligne).Value
Exit For
End If
Next
End Sub

Pour cet exemple, la valeur recherchée est en B2. Il faut que tu modifies le programme.

:jap: Salut !

Ca ce voit, ne t’inquète pas, quand c’est du code qui n’a pas été fait pas un développeur ! :lol: Dès que tu vois “Range” quelque part, tu peux être sûr que c’est soit enregistré automatiquement, soit un débutant :smiley:

Bon, une chose, déjà, à savoir : le contenu d’une cellule, c’est la propriété .Value ensuite, pour les objets qui ne contiennent pas de texte, c’est la même chose (une case à cocher, une case d’option, on contôle onglet, c’est le .Value… Par contre, pour des objets qui renvoient du texte (pas une zone de liste simple, hein !, c’est encore le .Value héhé), c’est la propriété .Text

Donc, dans ton cas, pour récupérer ce qu’il y a dans ta zone de liste déroulante, tu utlises la propriété .Text

On va dire, pour toi, que ta boîte de dialogue (qui contient ta zone de liste) se nomme Frm_Debut et que ta zone de liste se nomme Lsm_Choix (il y a des conventions dans le "nommage" des objets… Frm pour une UserForm, etc…)

Maintenant, pour les boucles ! Toute boucle doit avoir un début et une fin, et donc, doit être bornée ! On ne fait pas de truc au hasard ou du style “65536” pour boucler sur toutes les lignes d’une feuille ! :lol: Tu vas exploser ton proc ! non, je blague, tu vas juste avoir le temps d’allumer une clope…

Dans Excel, il y a une propriété qui contient le N° de ligne et de colonne de la dernière cellule, cette dernière cellule faisant partie d’une collection qui se nomme les “cellules spéciales”…

Traduction en VBA : ActiveCell.SpecialCells(xlCellTypeLastCell).Row

En français : à partir de la cellule active, je veux le N° de ligne de la dernière cellule qui appartient aux cellules spéciales ! :lol:

Maintenant que l’on a ces bases, on passe à la boucle ! Et on présume que ce que tu cherches se trouve en colonne 1 (Cells(N° de ligne, N° de colonne)

Dim L as long
For L= 2 To ActiveCell.SpecialCells(xlCellTypeLastCell).Row
    If Frm_Debut.Lsm_Choix.Text = Cells(L,1).Value Then
      'Recopie des infos
      end If
    Next

merci bien des conseils,
mais on dirait qu’il y a un probleme …

Cells(L,1).Value de la boucle for, il n’y a jamais de valeur dedans, donc la boucle ne fonctionne pas…

quelles peuvent etre les raisons ?

merci bien

Cette méthode la me donne une erreur de worksheet…
Sub Maj()
Recherche = Range("B2").Value
For Each C In Range("Banque_Sortes!A2:A1000")
If Recherche = C.Value Then
Ligne = C.Row
Range("F14").Value = Range("Banque_Sortes!B" & Ligne).Value
Range("G14").Value = Range("Banque_Sortes!C" & Ligne).Value
Exit For
End If
Next
End Sub

Il faut que tu remplaces Banque_Sortes par le nom de ta feuille excel.

bien ma feuille excel se nomme Banque_Sortes :stuck_out_tongue:

Quand tu dis que le boucle ne fonctionne pas, tu entends par là que L n’évolue pas ? Si il y avait une erreur de syntaxe, cela planterait direct, si c’est une erreur de logique, L aurait une value “Nul”… Par contre, possible que la colonne 1 ne comporte rien…

Pour vérifier, tu met un point d’arrêt sur ta ligne, et tout en faisant F8 (pas à pas), tu positionne ta souris sur la variable (ha oui, met la value de la cellule dans une variable, par ex : Toto=Cells(L,C).Value), et tu verras le contenu…

Mais bon, il manque tout le contexte pour que tu ai une réponse "béton"…