Problème macro

Résolu/Fermé
Lonyke - Modifié le 26 oct. 2020 à 11:36
 Lonyke - 27 oct. 2020 à 08:55
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.



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
A voir également:

1 réponse

jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 4 704
26 oct. 2020 à 11:53
Bonjour,

En effet, ta ligne
If ("C2:C9") = ("Facture payée") Then

est fausse.

C2:C9 ... n'est rien pour ta macro...
A la limite, ça serait
Range("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 exemple
For 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





0
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
0
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 4 704 > Lonyke
26 oct. 2020 à 15:00
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 )
0
Lonyke > jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024
26 oct. 2020 à 16:25
Merci pour votre aide, vous trouverez ci-joint mon fichier d'exemple.

https://www.cjoint.com/c/JJApxAWEYfg
0
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 4 704 > Lonyke
26 oct. 2020 à 17:27
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..
0
Lonyke > jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024
27 oct. 2020 à 08:55
Bonjour Jordane, je tiens à vous remercier pour votre application à ce sujet. Grâce à vous j'ai pu réussir ma VBA et gagner du temps.

En vous remerciant

Paul
0