Excel macro : Boucle Do Loop et Condition If

Snoopy6102000

XLDnaute Junior
Bonjour à tous, j'utilise pas mal les boucle et les conditions. Je repart toujours de mon modèle pour les modifier. Cependant, là je ne comprends pas pourquoi cela ne marche pas.
Je met ci-joint mon fichier. C'est une macro qui correspond à la feuille "débit", elle est dans le module 5 et je l'ai recopiée en module 6 (et simplifiée) pour essayer de comprendre mon erreur.
J'ai créé un lien car ça passe pas en pièce jointe (extension?)
http://cjoint.com/?0FzovZD4ezm

Je vous recopie ici la macro simplifiée
Sub test()
B = 8
Set ChercheGlobal = Sheets("Débit").Cells(B, 20)
Set ArrêtChercher = Sheets("Débit").Cells(B, 2)
Set IndiqueB = Sheets("CTRL")

Do While ArrêtChercher <> ""
With Sheets("Débit").Range("A8:U34")
Set trouvé1 = .Find(ChercheGlobal)

If trouvé1 <> "" Then
IndiqueB.Select
Sheets("CTRL").Copy After:=Sheets(Sheets("Débit").Cells(B, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(B, 2).Value
End If

End With

B = B + 1
Set ChercheGlobal = Sheets("Débit").Cells(B, 20)
Set CherchePièces = Sheets("Débit").Cells(B, 21)

Set ArrêtChercher = Sheets("Débit").Cells(B, 2)

Set IndiqueB = Sheets("CTRL")
Set IndiqueC = Sheets("CTRL-P")
Loop

Sheets("Débit").Select

End Sub

- - - -
En fait il s'agit surtout d'un problème autour de ma condition, car j'avais commencé avec trouvé1 ="X" , qui est ma condition "normale", mais il n'en veut pas, et passe directement à la suite, même si X est bien dans la cellule concernée. Le numéro de colonne est bon.

Merci d'avance pour votre aide!
 
C

Compte Supprimé 979

Guest

Si...

XLDnaute Barbatruc
Re : Excel macro : Boucle Do Loop et Condition If

salut

Ce qui est bizarre c'est que cette macro est la copie d'une autre sur le mêm principe et qui marche bien lol

vraiment bizarre : ta macro contient des lignes inutiles et même fausses !
Avec
Code:
Set trouvé1 = .Find(ChercheGlobal)
tu ne peux pas avoir
Code:
If trouvé1 <> "" Then

Avec ce que j'ai compris essaie tout simplement :
Code:
Sub test()
  Dim C As Range
  With Sheets("Devis") '????
   For Each C In .Range("A7", .[A6500].End(xlUp))
       Sheets("CTRL").Copy After:=Sheets(C.Text)
       ActiveSheet.Name = "PV-" & C
   Next
  End With
End Sub

mais attention, il n'y a pas de test de validité (feuille déjà présente) !
 
Dernière édition:

Snoopy6102000

XLDnaute Junior
Re : Excel macro : Boucle Do Loop et Condition If

Bonjour à tous,
Pour la formule de Bill, ça ne va pas il me recopie pour chaque ligne, cochée ou non. C'est ce que ça me faisait aussi, suivant le test fait.

Pour Si...
Sur Sheets("CTRL").Copy After... il me dit L'indice n'appartient pas à la sélection.

Il y a sûrement en effet des lignes pas correctes. Quand je ne connais pas la formulation, je fait un enregistrement macro, et je modifies, ou alors je cherche aussi sur les forums, et à vrai dire, si ça marche je me pose pas trop la question sur les lignes inutiles...

Merci d'avance pour votre aide.
J'aim bien la formule de Si..., maintenant que je la vois, je l'avais un peu utilisé dans une autre macro me masquant les lignes vides. je vais donc essayer de partir plutôt dans cette direction...
 

Snoopy6102000

XLDnaute Junior
Re : Excel macro : Boucle Do Loop et Condition If

Alors, me voilà partie de cette formule avec ceci :
Sub PVCTRL()

Dim C As Integer
With Sheets("Débit")
For C = Cells(34, 8).Row To 1 Step -1
If Cells(C, 20).Value = "X" Then
Sheets("CTRL").Copy After:=Sheets(Sheets("Débit").Cells(C, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(C, 2).Value


End If
Next
End With

J'espère ne pas trop avoir "bousillé" la formule de départ.
Sauf que voilà, il remonte, mais quand la condition est bonne, il s'arrête et ne va pas voir les lignes au-dessus. Du coup il me copie 1 fois comme il faut, ensuite il ne fait pas les lignes qui restent... (euhh c clair?)
 

Snoopy6102000

XLDnaute Junior
Re : Excel macro : Boucle Do Loop et Condition If

j'ai essayé Next C ça change rien... bon, essayons de décortiquer l'ensemble pour que je comprenne bien

Sub tetrrrst()

Dim C As Integer
With Sheets("Débit")
For C = Cells(34, 8).Row To 1 Step -1 =>chaque ligne des lignes 34 à 8 en remontant une par une
If Cells(C, 20).Value = "X" Then => si la valeur de la cellule de cette ligne colonne 20 est "X" Alors...
Sheets("CTRL").Copy After:=Sheets(Sheets("Débit").Cells(C, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(C, 2).Value
End If
Next C => Ligne suivante...
End With
End Sub
 

Snoopy6102000

XLDnaute Junior
Re : Excel macro : Boucle Do Loop et Condition If

Bon, j'ai trouvé, il fallait revenir sur la feuille "Débit" pour pouvoir continuer, ce qui donne ceci :

Sub tetrrrst()

Dim C As Integer
With Sheets("Débit")
For C = Cells(34, 8).Row To 1 Step -1
If Cells(C, 20).Value = "X" Then
Sheets("CTRL").Copy After:=Sheets(Sheets("Débit").Cells(C, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(C, 2).Value
End If
Sheets("Débit").Activate
Next
End With
End Sub

Je vais maintenant inclure la seconde colonne, car en fait, il y a 2 feuilles possibles de pv à copier.
 

Snoopy6102000

XLDnaute Junior
Re : Excel macro : Boucle Do Loop et Condition If

Ici j'inclus ma seconde condition :


Sub tetrrrst()

Dim C As Integer
With Sheets("Débit")
For C = Cells(34, 8).Row To 1 Step -1
If Cells(C, 20).Value = "X" Then
Sheets("CTRL").Copy After:=Sheets(Sheets("Débit").Cells(C, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(C, 2).Value
Else
If Cells(C, 21).Value = "X" Then
Sheets("CTRL-P").Copy After:=Sheets(Sheets("Débit").Cells(C, 2).Value)
ActiveSheet.Name = "PV-" & Sheets("Débit").Cells(C, 2).Value
End If
End If
Sheets("Débit").Activate
Next
End With
End Sub
 

Discussions similaires

Réponses
12
Affichages
630

Statistiques des forums

Discussions
312 649
Messages
2 090 511
Membres
104 560
dernier inscrit
ribambelle