Problème macro

Résolu
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.

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

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    1. Lonyke
       
      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
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Lonyke
         
        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
      2. Lonyke > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci pour votre aide, vous trouverez ci-joint mon fichier d'exemple.

        https://www.cjoint.com/c/JJApxAWEYfg
        0
      3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Lonyke
         
        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
      4. Lonyke > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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