[resolu]Boucle (VBA)

RV51

XLDnaute Nouveau
Bonjour,

Petit soucis avec mes boucles:

LigML = 5


While Worksheets("ML").Cells((LigML + 1), 1).Value <> ""
LigML = LigML + 1
Ligne = 11

While Worksheets("Consolidation ZSFG").Cells(Ligne, 1).Value <> ""

If Worksheets("ML").Cells(LigML, 1).Value = Worksheets("Consolidation ZSFG").Cells(Ligne, 1).Value Then

Worksheets("Consolidation ZSFG").Cells(Ligne, 6) = "x"
Ligne = Ligne + 1

Else: Ligne = Ligne + 1
End If

Wend

Wend


Ma boucle en bleu fonctionne bien, mais dés que j'ajoute celle en rouge, cela tourne en continue. J'arrive pas à voir ou je me plante.

Quelqu'un aurait une idée??

Merci
 
Dernière édition:

RV51

XLDnaute Nouveau
Re : Boucle (VBA)

Bonjour tototiti2008,

Petite précision, ma feuille ML contenant 29483 lignes, j'ai donc déclaré LigML en Long.
Sinon, c'est cette ligne (While Worksheets("ML").Cells((LigML + 1), 1).Value <> ""
) qui vous fait tiquer?
 

tototiti2008

XLDnaute Barbatruc
Re : Boucle (VBA)

Re,

Ce qui me fait tiquer c'est que tu boucles sur des cellules et on ne sait pas pour quoi faire, ni même le contenu des cellules puisqu'on a pas un bout de fichier exemple
Difficile d'expliquer le pourquoi d'une boucle infinie si on a pas une idée des données qu'elle teste, ni pourquoi on les teste...
Désolé de ma réponse ironique du message précédent...
 

nyko283

XLDnaute Occasionnel
Re : Boucle (VBA)

Bonjour Rv,tototiti,

en remplaçant les "whiles" par des "for"
ca donne çà :
VB:
Dim i As Long, x As Long
For i = 5 To Sheets("ML").Range("A:A").Cells.SpecialCells(xlCellTypeLastCell).Row
    If Sheets("ML").Cells(i, 1).Value = "" Then Exit For
    For x = 11 To Sheets("Consolidation ZSFG").Range("A:A").Cells.SpecialCells(xlCellTypeLastCell).Row
        If Sheets("Consolidation ZSFG").Cells(x, 1).Value = "" Then Exit For
        If Worksheets("ML").Cells(i, 1).Value = Worksheets("Consolidation ZSFG").Cells(x, 1).Value Then
            Worksheets("Consolidation ZSFG").Cells(x, 6) = "x"
        End If
    Next x
Next i

je n'est pas test le code d'origine mais sur un fichier de quelque lignes celui ci fonctionne à toi de voir si çà le fait dans ton fichier.
 

Pièces jointes

  • test.xls
    25.5 KB · Affichages: 81
  • test.xls
    25.5 KB · Affichages: 85
  • test.xls
    25.5 KB · Affichages: 83
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Boucle (VBA)

Bonjour nyko,
Re,

Il n'y a pas de boucle infinie, c'est juste très long

un code qui devrait être un peu plus rapide (mais je suis sûr que Pierrot nous trouvera encore plus rapide ;))

Code:
    Dim Ligne As Long
    Dim LigML As Long
    Dim Marque As String, Code As String, PlageML As Range

    With Worksheets("Consolidation ZSFG")
        Marque = ""
        Code = ""
        LigML = Worksheets("ML").Range("A65536").End(xlUp).Row
        Set PlageML = Worksheets("ML").Range("A5:A" & LigML)
        For Ligne = 11 To .Range("A65536").End(xlUp).Row
            If Code <> .Cells(Ligne, 1).Value Then
                Code = .Cells(Ligne, 1).Value
                If Application.CountIf(PlageML, Code) > 0 Then
                    Marque = "x"
                Else
                    Marque = ""
                End If
            End If
            If Marque <> "" Then .Cells(Ligne, 6).Value = Marque
        Next Ligne
    End With
    Set PlageML = Nothing
 
Dernière édition:

RV51

XLDnaute Nouveau
Re : Boucle (VBA)

Bonjour nyko,
Re,

Il n'y a pas de boucle infinie, c'est juste très long

un code qui devrait être un peu plus rapide (mais je suis sûr que Pierrot nous trouvera encore plus rapide ;))

Code:
    Dim Ligne As Long
    Dim LigML As Long
    Dim Marque As String, Code As String, PlageML As Range

    With Worksheets("Consolidation ZSFG")
        Marque = ""
        Code = ""
        LigML = Worksheets("ML").Range("A65536").End(xlUp).Row
        Set PlageML = Worksheets("ML").Range("A5:A" & LigML)
        For Ligne = 11 To .Range("A65536").End(xlUp).Row
            If Code <> .Cells(Ligne, 1).Value Then
                Code = .Cells(Ligne, 1).Value
                If Application.CountIf(PlageML, Code) > 0 Then
                    Marque = "x"
                Else
                    Marque = ""
                End If
            End If
            If Marque <> "" Then .Cells(Ligne, 6).Value = Marque
        Next Ligne
    End With
    Set PlageML = Nothing


Cela fonctionne, trop cool car cela faisait un certains nombres d'heures que je planchais là-dessus :)

Bon,maintenant, il faut que je comprenne parfaite ces lignes de code, étant débutant, il y a encore des fonctions que je cerne mal.
En tout cas, un grand merci a vous tous pour votre aide et réactivité.
 

Discussions similaires

Réponses
0
Affichages
176
Réponses
6
Affichages
286

Statistiques des forums

Discussions
312 489
Messages
2 088 848
Membres
103 974
dernier inscrit
chmikha