Liste avec des conditions. Boucle While et IF

Résolu/Fermé
LH - 4 août 2022 à 17:50
 LH - 5 août 2022 à 10:34

Bonjour à tous,

J'ai une liste de mot dans mon fichier excel (cellule U2 à U59) et une liste de réponse (cellules V2 à V59)

Je voudrai que pour chaque ligne du fichier (2 à 156) on teste si la cellule C2 contient le contenu de la cellule U2.

Si oui, alors on renvoit le contenu de la cellule V2 dans la cellule M2. Si non, alors on ne met rien et on passe à la ligne suivante dans notre liste de mot (et on recommence avec U3 et V3 à la place de U2 et V2).

J'avais fait un début de code avec des while (de 2 à 59) et des if mais cela n'a jamais rien donné

Si quelqu'un a une idée de la réponse ou veut me mettre sur la piste je suis super intéressé car copier coller n'est pas possible (la liste va s'allonger dans les semaines à venir).

Merci d'avance à tous 


Windows / Chrome 104.0.0.0

2 réponses

f894009 Messages postés 17204 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 12 octobre 2024 1 709
Modifié le 4 août 2022 à 18:15

Bonjour,

chaque ligne du fichier (2 à 156) on teste si la cellule C2 contient le contenu de la cellule U2.

Seulement la cellule C2?

La mise  jour doit etre automatique ou sur action type bouton ou combinaison de touche pour lancer le code

0
ozone_ Messages postés 1518 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 2 juin 2023 478
4 août 2022 à 18:25

Bonjour,

Un exemple de macro :

https://www.cjoint.com/c/LHeqzmDf3Ow

Option Explicit

Sub chercheMot()

Dim listeDeMot As Long
Dim finRecherche As Long
Dim i As Long: i = 2

Dim rangeRecherche As Range
Dim rangeListeMot As Range

Dim ws As Worksheet: Set ws = ActiveSheet

With ws

    ' Délimite la longueur des listes
    finRecherche = .Cells(Rows.Count, "C").End(xlUp).Row
    listeDeMot = .Cells(Rows.Count, "U").End(xlUp).Row
    
    ' Définit les ranges de recherche
    Set rangeRecherche = .Range(.Cells(2, "C"), .Cells(finRecherche, "C"))
    Set rangeListeMot = .Range(.Cells(2, "U"), .Cells(listeDeMot, "U"))
    
    ' Boucle et recherche pour chaques lignes non vides dans la colonne C
    Do
        If Not IsError(Application.Match(.Cells(i, "C").Value, rangeListeMot, 0)) Then
            ' Renvoi le contenu de la cellule Vi dans la cellule Mi
            .Cells(i, "M") = .Cells(i, "V")
        Else
            ' Rien
        End If
        
    i = i + 1
    
    Loop While .Cells(i, "C") <> ""

End With


End Sub

0

Bonjour à tous,

Je me permets de revenir vers vous, grâce à Ozone j'ai put résoudre mon problème !

J'ai un peu simplifié le code et ajuster à mon problème :

Option Explicit

Sub chercheMot()

Dim listeDeMot As Long
Dim finRecherche As Long
Dim i As Long: i = 2
Dim j As Long: j = 2

Dim ws As Worksheet: Set ws = ActiveSheet

With ws

    ' Délimite la longueur des listes
    finRecherche = .Cells(Rows.Count, "A").End(xlUp).Row
    MsgBox (finRecherche)
    listeDeMot = .Cells(Rows.Count, "U").End(xlUp).Row - 1
    MsgBox (listeDeMot)
    
    ' Boucle et recherche pour chaques lignes non vides dans la colonne C
    Do While i < listeDeMot + 2
        Do While j < finRecherche + 2
            If InStr(1, Cells(j, 3), Cells(i, 21)) <> 0 And Cells(j, 6) > 0 Then
                Cells(j, 13) = Cells(i, 22)
            End If
        j = j + 1
        Loop
    j = 2
    i = i + 1
    Loop
    
End With


End Sub
0