Problème macro
Résolu
Lonyke
-
Lonyke -
Lonyke -
Bonjour,
J'ai un problème au sein de ma macro, étant débutant en VBA (c'est ma première) j'ai essayé d'introduire une condition au sein de ma macro. Or celle-ci ne fonctionne pas pourtant j'ai beau cherché l'erreur je n'arrive pas à la trouver.
Ma macro consiste à chercher dans la colonne C si la facture est payée, si celle-ci est payée alors je la copie, je la colle dans la feuille appelée Tableau N-1. Après cela je retourne dans la première feuille et je supprime les données qui sont saisies. Cela me permet de garder une trace des factures qui ont été payées l'année précédente et de bien visualiser ceux en attente de paiement.
En espérant avoir été clair, ce n'est pas simple d'expliquer avec des mots, visualiser est plus simple.
Je vous remercie par avance de votre aide, ci-dessous ma macro.
J'ai un problème au sein de ma macro, étant débutant en VBA (c'est ma première) j'ai essayé d'introduire une condition au sein de ma macro. Or celle-ci ne fonctionne pas pourtant j'ai beau cherché l'erreur je n'arrive pas à la trouver.
Ma macro consiste à chercher dans la colonne C si la facture est payée, si celle-ci est payée alors je la copie, je la colle dans la feuille appelée Tableau N-1. Après cela je retourne dans la première feuille et je supprime les données qui sont saisies. Cela me permet de garder une trace des factures qui ont été payées l'année précédente et de bien visualiser ceux en attente de paiement.
En espérant avoir été clair, ce n'est pas simple d'expliquer avec des mots, visualiser est plus simple.
Je vous remercie par avance de votre aide, ci-dessous ma macro.
Sub Macro1()
'
' Macro1 Macro
If ("C2:C9") = ("Facture payée") Then
Range("A2:D9").Select
Selection.Copy
Sheets("Tableau N-1").Select
Range("A2:D9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Tableau N").Select
Rows("2:9").Select
Application.CutCopyMode = False
Selection.ClearContents
Rows("2:9").Select
Selection.Delete Shift:=xlUp
End If
End Sub
1 réponse
-
Bonjour,
En effet, ta ligneIf ("C2:C9") = ("Facture payée") Then
est fausse.
C2:C9 ... n'est rien pour ta macro...
A la limite, ça seraitRange("C2:C9")
Mais là encore.. il y a un souci
Ce n'est pas la plage de cellule qui peut être égale à "Facture payée" .. mais chaque cellule individuellement...
Il te faut donc faire une boucle sur chaque cellule de cette plage..
par exempleFor each C in Range("C2:C9") If C.value = "Facture payée" Then Range(cells(C.Row,1),Cells(C.Row,4)).Select '.. suite de ton code End If Next
-
Merci de votre réponse cela m'a permis d'avancer sur le sujet. Malheureusement quand j'exécute la macro le critère n'est pas respecté, tout est copié. Ai-je mal interprété vos propos ?
En vous remerciant par avance.
Sub Macro1()
'
' Macro1 Macro
For Each C In Range("C2:C9")
If C.Value = "Facture payée" Then
Range(Cells(C.Row, 1), Cells(C.Row, 4)).Select
Selection.Copy
Sheets("Tableau N-1").Select
Range("A2:D9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Tableau N").Select
Rows("2:9").Select
Application.CutCopyMode = False
Selection.ClearContents
Rows("2:9").Select
Selection.Delete Shift:=xlUp
End If
Next
End Sub- Déjà, pour poster ton code sur le forum, merci d'utiliser les BALISES DE CODE.
Explications à lire ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Ensuite, Dans quelle feuille se trouvent les données de ta plage C2:C9 ?
Es-tu sûr que la cellule contient bien uniquement le texte Facture payée ( écrit strictement de la même manière, sans espaces superflues avant ou après ... avec les mêmes majuscules .. ) ?
Dans l'idéal, partage nous un classeur d'exemple (que tu peux mettre sur cijoint.com par exemple : https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers ) - Bon.. déjà, le début de ta macro devrait ressembler à un truc du genre
Sub Macro1() ' ' Macro1 Macro Dim ShSrc As Worksheet ' Feuille Source Dim ShCible As Worksheet ' Feuille Cible Set ShSrc = ThisWorkbook.Sheets("Tableau N") Set ShCible = ThisWorkbook.Sheets("Tableau N-1") For Each C In ShSrc.Range("C8:C47") If C.Value = "Facture payée" Then ligne = C.Row ShSrc.Select ShSrc.Range(Cells(ligne, 1), Cells(ligne, 4)).Select ' plage de la colonna A à F Selection.Copy
Il reste ensuite la "coller" à gérer.
Tel que tu as écrit ton code, ça écrasera toujours la même ligne.... il te faut donc , dans la feuille N-1 trouver la première ligne vide pour y coller le résultat
Tu trouveras de nombreux exemples sur le net pour ça..
-