Excel copier ligne ds autre feuille pui suppr

Viv -  
wilfried_42 Messages postés 912 Statut Contributeur -
Bonjour,

j'ai une feuille (encours) de différentes données et je souhaiterais que pour une action que je déclencherais (ex: cocher une case puis valider sur un bouton ou mettre un X la cellule de la ligne concerné et appuyer sur un bouton), la ligne de données se copie dans une autre feuille (historique) et se supprime de la feuille d'origine (encours).

Pouvez-vous m'aider?

Merci

7 réponses

  1. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    Bonjour

    Sans fichier, c'est une peu complexe, mais voici une macro qui peu t'aider mais qu'il faut adapter
    je pars du principe que la Croix se trouve En colonne A

    sub macro_delete()
          activesheet.range("A1").autofilter field:=1, criteria:="x"
          Range("A2:A" & range("A65536").end(xlup).row).cells.specialcells(xlcelltypevisible).entirerow.select
          selection.copy destination:=sheets("Feuil2").range("A" & sheets("Feuil2").range("A65536").end(xlup).row)
          selection.delete
          activesheet.range("A1").autofilter
    end sub

    macro faite à main levée, non testée (mais ca à l'air ok)
    0
    1. viv
       
      Merci pour ta réponse,

      J'ai testé, mais ça me met "erreur".
      Je joins le fichier sur lequel je souhaite faire cette macro.

      Il y a 3 feuilles, et une fois qu'il y a un X dans la colonne "Soldée" pour chaque feuille, je souhaite que (automatiquement ou en créant un bouton à cliquer) la ligne entière où se trouve ce X, s'efface de ce classeur (ou feuille) et se copie dans un autre classeur Historique avec feuille Histo commande, histo réception, histo façon (ou dans le même classeur dans feuilles historique commande, historique réception, historique façon)

      Merci de ton aide
      0
    2. viv
       
      je n'ai pas réussi à joindre mon fichier<code>


      Voici un aperçu de ce que j'ai en première ligne sur la 1ére feuille et donc ce que je dois remplir

      Soldée N° Commande Tisseur Article Date de commande Prix Qté Comm Qté Livrée Reste à Livrer
      
      
      </code>
      0
  2. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    voici le fichier avec la macro, une petite erreur sur Criteria : Criteria1

    https://www.cjoint.com/?krjxxixqaP
    0
    1. cervezaman62 Messages postés 2 Statut Membre
       
      Merci Enormément Wilfried!!!

      Juste un dernier truc, peux tu me dire comment faire pour m'en servir d'en plusieurs fichiers, car je ne connais pas du tout le fonctionnement des macros.

      Et est ce qu'il est possible de faire l'historique (enregistrement des lignes supprimées) dans un autre classeur? si oui, comment.

      En tout cas, merci beaucoup de ton aide!
      0
  3. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    oui c'est faisable, mais les renseignement donnés sont actuellement assez vagues, il maque la structure des classeurs d'origine (si c'est la meme), la structure du classeur historique (Nom, Chemin, Feuilles...............
    0
    1. Viv
       
      voici le chemin, j'ai mis les 2 fichiers zippés pour que tu ais la présentation des feuilles:

      http://www.cijoint.fr/cjlink.php?file=cj200810/cijNwsM4od.zip

      les 2 fichiers seront dans le même dossier (Sous-traitance) dont voici le chemin:

      \\murielle\Partage Prod\Sous-Traitance

      Si ce n'est pas le cas, peux tu les enregistrer au format Excel 97-2003.

      Encore merci à toi
      0
    2. Viv
       
      En fait, je pense que ça sert à rien de compliquer le fichier en créant un enregistrement sur un autre classeur.

      Autant garder cette macro qui copie les lignes cochées vers une autre feuille.

      Cependant, je souhaiterai que lorsque je click sur le bouton cela fasse la même opération pour 2 autres feuilles vers 2 autres destinations (feuilA vers Histo feuilA, par exemple) peux-tu m'aider?

      Aprés, ça sera nickel.

      J'ai testé ça marche superbien, sauf si je clique sur le bouton et qu'il n'y a pas de lignes de cochées, ça me copie quand même la 1ère ligne même si elle n'est pas coché.

      Merci de ton aide
      0
  4. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    voila la macro

    Sub Bouton1_QuandClic()
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Sheets
            Select Case ws.Name
                Case "FeuilA", "FeuilB", "FeuilC" ' Nom des feuilles à traiter
                    ws.Activate
                    ActiveSheet.Range("A1").AutoFilter field:=1, Criteria1:="x"
                    If Range("A65536").End(xlUp).Row > 1 Then
                        Range("A2:A" & Range("A65536").End(xlUp).Row).Cells.SpecialCells(xlCellTypeVisible).EntireRow.Select
                        Selection.Copy Destination:=Sheets("Histo" & ActiveSheet.Name).Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1)
                        Selection.Delete
                    End If
                    ActiveSheet.Range("A1").AutoFilter
                Case Else
            End Select
        Next
    End Sub


    en gras souligné : le nom de la feuille hitorique devant recuperer les archive : HISTOFeuilA, HISTOFeuilB......
    0
    1. Viv
       
      Merci Wilfried,

      je viens de tester la macro, mais malheureusement ça ne fonctionne, car j'ai dû mal renseigner des trucs dans ce que tu m'as envoyé.

      De plus, je sais pas si c'est important, mais bon, mes données commencet à partir de la ligne 5 (d'où le A5) et le titre des colonnes et en ligne 4 pour chaque feuille, je ne sais pas si cela change quelque chose, mais te l'indique au cas où.


      Sub Bouton1_QuandClic()
          Dim ws As Worksheet
          For Each ws In ThisWorkbook.Sheets
              Select Case ws.Name
                  Case "Commandes", "Réceptions", "Façon" ' Nom des feuilles à traiter
                      ws.Activate
                      ActiveSheet.Range("A4").AutoFilter field:=1, Criteria1:="x"
                      If Range("A65536").End(xlUp).Row > 1 Then
                          Range("A5:A" & Range("A65536").End(xlUp).Row).Cells.SpecialCells(xlCellTypeVisible).EntireRow.Select
                          Selection.Copy Destination:=Sheets("Histo_Commandes", "Histo_Réceptions", "Histo_Façon" & ActiveSheet.Name).Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1)
                          Selection.Delete
                      End If
                      ActiveSheet.Range("A4").AutoFilter
                  Case Else
              End Select
          Next
      End Sub



      Merci de ton aide
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    Selection.Copy Destination:=Sheets("Histo_" & ActiveSheet.Name).Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1)


    activesheet.name comprend le nom de la feuille en cours de traitement, donc
    soit : Commandes, Réceptions, Façon, chacune de ces feuilles va etre traitée l'une apres l'autre
    donc pour la premiere on concatene "Histo_" & Commandes, ensuite "Histo_" & Réceptions et enfin "Histo_" avec Façon

    0
    1. Viv
       
      Oki, mais du coup, dois-je laisser comme ça:

      Selection.Copy Destination:=Sheets("Histo_" & ActiveSheet.Name).Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1

      ou comme ça:

      Selection.Copy Destination:=Sheets("Histo_" & "Commandes").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1

      J'ai essayé les 2 cas, et une erreur me renvoit à cette ligne.

      Et à quoi sert le .Range("A" & Sheets("Feuil2")?

      Merci
      0
  7. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    Désolé, étant au boulot, je ne suis pas à 100% dans la macro, j'e crois avoir trouvé l'erreur : Feuil2

    Selection.Copy Destination:=Sheets("Histo_" & ActiveSheet.Name).Range("A" & Sheets("Histo_" & ActiveSheet.Name).Range("A65536").End(xlUp).Row + 1


    Sheets("Histo_" & activesheet.name) ' Defini la feuille de reception
    .range("A" & sheets("Histo_" & activesheet.name).range("A65536").end(xlup).row + 1) ' Defini l'emplacement de copie
    en gras, Range("A65536").end(xlup).row donne la N° de la derniere ligne utilisée, en ajoutant 1 on a la prochaine ligne vierge (donc on part de la derniere (A65536) on, cherche la permiere valeur (.end) en remontant (Xlup)

    je ne sais pas si je suis clair, dur dur d'expliquer
    0
    1. Viv
       
      Cela fonctionne désormais, mais uniquement pour la feuille "commande", ça y est presque!!!
      0
  8. wilfried_42 Messages postés 912 Statut Contributeur 245
     
    re:

    à mon avis, ca vient de tes noms de feuille maintenant, attention aux majuscules, aux accents....

    Commandes : Histo_Commandes
    Réception : Histo_Réception
    Façon : Histo_Façon
    0