Fin de boucle non maîtrisée + erreur 1004
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 SubMerci 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