Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA - Boucle while interminable !

Fabinou62

XLDnaute Occasionnel
Bonjour à tous,

Tout est dit dans le titre, alors je sais vous allez dire : regarde ta condition mais c'est ca le problème je ne sais pas
Le End While ne fonctionne pas (erreur), je l'ai remplacé par Wend. Voici mon code :

VB:
While vtrouvé <> 1 Or indextab2 <> (nbrecolonneTCD + 9)
 
                    If Cells(2, indextab2).Value = ville(0) Then
                        commune(0) = ville(0)
                        vtrouvé = 1
                        MsgBox ("Trouvé")
                        
                    Else
                        indextab2 = indextab2 + 1
                    End If
                    
                Wend

Indextab2, une variable qui s'incrément avec For,
commune et ville sont obtenu par la fonction Split

L'objectif est de comparer 2 villes et si elles sont égaux, la valeur est stockée dans commune.

Merci d'avance
 
Solution
Bonjour,
Si Vtrouvé <> 1 Or indextab2 <> (nbrecolonneTCD + 9)
Alors là boucle est infini car l'expression
Indextab2 <> (nbrecolonneTCD + 9) n'est pas forcément rempli il faut utiliser une expression de sortie qui utilise un And et non un Or!
VB:
Do While indextab2 <> (nbrecolonneTCD + 9)
 
                    If Cells(2, indextab2).Value = ville(0) Then
                        commune(0) = ville(0)
                        MsgBox ("Trouvé")
                        Exit Do
                        
                    Else
                        indextab2 = indextab2 + 1
                    End If
                    
 Loop

Dranreb

XLDnaute Barbatruc
Les procédures qui utilisent la méthode Cells dans des boucles sont toujours interminables. Il faut charger la valeur de toute la plage dans un tableau dynamique et travailler avec les éléments de celui ci.
 

fanch55

XLDnaute Barbatruc
Salut, comme il nous manque pas mal de données,
une petite sub interprétée :
VB:
Sub test()
Dim ville(1), commune(1)
    indextab = 2
    nbrecolonneTCD = 5 ' nombre de colonnes de la ligne à scruter
    ville(0) = "toulon"
    Set found = Cells(2, indextab).Resize(, 1 + nbrecolonneTCD - indextab).Find(ville(0))
    If found Is Nothing Then
        MsgBox ville(0) & " non trouvée"
    Else
        commune(0) = ville(0)
        MsgBox ville(0) & " en " & found.Address & vbLf & "commune=" & commune(0)
    End If

End Sub
 

dysorthographie

XLDnaute Accro
Bonjour,
Si Vtrouvé <> 1 Or indextab2 <> (nbrecolonneTCD + 9)
Alors là boucle est infini car l'expression
Indextab2 <> (nbrecolonneTCD + 9) n'est pas forcément rempli il faut utiliser une expression de sortie qui utilise un And et non un Or!
VB:
Do While indextab2 <> (nbrecolonneTCD + 9)
 
                    If Cells(2, indextab2).Value = ville(0) Then
                        commune(0) = ville(0)
                        MsgBox ("Trouvé")
                        Exit Do
                        
                    Else
                        indextab2 = indextab2 + 1
                    End If
                    
 Loop
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…