Fin de boucle non maîtrisée + erreur 1004

12qr-tracker-5.xlsm (95.66 Ko)

Bonjour à tous !

Débutant en vba sous excel, j'ai un double souci sur mon code :

  • Alors que je demandais une fin de "Do While" quand on arrive à la colonne 2, le processus se poursuit et prend en compte la colonne 1 alors que je ne le veux pas.
  • Une fois la dernière colonne étudiée, j'ai un message d'erreur "Erreur d'exécution 1004 - Erreur définie par l'application ou par l'objet".

Pour le 1er souci, je ne comprends pas, mon code fonctionne pour ma fin de loop sur les lignes, mais pas pour la fin de loop pour les colonnes...

Du coup, je pense que le second probème est lié au premier...

Quelqu'un peut me dire quelle(s) est (sont) l' (les) erreur(s) dans mon code ?

Private Sub CommandButton1_Click()

' Le but de la macro est de sélectionner les cellules de la plage B6:BG200 répondant aux conditions suivantes :
' - différent de " / "
' - différent de "FIN"
' et de les coller dans la colonne A à partir de la ligne 210

' Définition et dimensionnement des variables :
Dim COL As Integer, LIG As Integer, VAL As String, LIG2 As Integer, VAL2 As String

' Points de départ des calculs :
COL = 10 ' colonne 59 (BG)'ATTENTION VALEUR MODIFIEE POUR TEST --> 10 au lieu de 59
LIG = 6 ' ligne 6 (après les entêtes de colonnes)
VAL = Cells(LIG, COL).Value ' valeur de la cellule d'origine
LIG2 = 210 ' ligne 210 après le tableau de généalogie
VAL2 = Cells(LIG2, 1).Value ' valeur de la cellule de destination

Do Until COL = 2
' Si la valeur sur la ligne 202 est égale à 195,
' Alors passer à la colonne précédente,
' Sinon analyser la valeur des cellules de la ligne 6 à 200 et passer à la colonne suivante

' Passage des calculs en mode manuel
Application.Calculation = xlCalculationManual
MsgBox "nouvelle colonne à analyser"
If Cells(202, COL).Value = 195 Then
COL = COL - 1
VAL = Cells(LIG, COL).Value

Else:

    Do Until LIG = 11 'ATTENTION VALEUR MODIFIEE POUR TEST --> 10 au lieu de 200 (201 mieux)
    ' Si la valeur de la cellule est différente de " / " ou "FIN",
    ' Alors ajouter la valeur de la cellule dans la liste des lots à traquer, et passer à la ligne suivante
    ' Sinon Passer à la ligne suivante

        If VAL <> " / " Or VAL <> "FIN" Then
        ' Si la valeur de la cellule de destination est nulle,
        ' Alors copier la valeur de la cellule d'origine dans la cellule de destination, et passer à la ligne suivante
        ' Sinon passer à la ligne2 suivante

            If Cells(LIG2, 1).Value = "EMPTY" Then
            Cells(LIG2, 1).Value = Cells(LIG, COL).Value
            VAL2 = VAL
            LIG = LIG + 1
            LIG2 = LIG2 + 1

                If LIG = 11 Then
                MsgBox "Limite de ligne atteinte"
                COL = COL - 1
                LIG = 6
                Else 'Ne rien faire
                End If

                    If COL = 2 Then
                    MsgBox "Limite de colonne atteinte"
                    COL = 1
                    Else 'Ne rien faire
                    End If

            Else:
            LIG2 = LIG2 + 1
            End If

        Else:
        LIG = LIG + 1
        COL = COL - 1
        MsgBox "Cellule origine N/A"
        End If

    Loop

End If

Loop

' Passage des calculs en mode automatique

Application.Calculation = xlCalculationAutomatic

' Message de fin de tâche

MsgBox "Fini !!!"

End Sub

Merci d'avance

Bonjour,

A toutes fins utiles, je te signale que si je n'avais pas retenue les boucles Do... Loop [ l'appellation générique de cette boucle est Do... Loop et non Do While qui ne reflèterait qu'une option sur les 4 qu'elle admet ], c'est parce que des boucles For... Next étaient moins suceptibles d'induire des erreurs, des problèmes de fin de boucles ne pouvaient s'y poser, simplifiaient le code (donc plus facile à suivre) et économisaient des variables.

Mais à chacun de faire ses expériences...

Cordialement.

MFerrand a écrit :

Bonjour,

A toutes fins utiles, je te signale que si je n'avais pas retenue les boucles Do... Loop [ l'appellation générique de cette boucle est Do... Loop et non Do While qui ne reflèterait qu'une option sur les 4 qu'elle admet ], c'est parce que des boucles For... Next étaient moins suceptibles d'induire des erreurs, des problèmes de fin de boucles ne pouvaient s'y poser, simplifiaient le code (donc plus facile à suivre) et économisaient des variables.

Mais à chacun de faire ses expériences...

Cordialement.

En effet, ta method a l'air plus simple. Mais pour le moment, j'apprends le Do while / do until ^^

Bonjour à tous !

Une idée d'où vient le souci de macro qui continue de tourner après avoir attaint la valeur limite de son intervalle de definition ?

Merci d'avance !

Solution trouvée, merci quand meme

Rechercher des sujets similaires à "fin boucle maitrisee erreur 1004"