Créer une macro

https://www.cjoint.com/c/IAiqKLXZ47J

Voici mon besoin, je voudrais coller dans la feuil2, toutes les lignes pour lesquelles dans la colonne G il y a un numéro différent de 1,
Donc les cases vides aussi, et qui lors de ces groupes, le lot ou le numéro de pièce est différent sur les groupes de 2 ou 4 lignes.

Si ce n'est pas clair je peut apporter plus d'explication

3 réponses

  1. Sub tri()
    i = 2
    While i < 10
    If Cells(i, 7) <> 1 And Cells(i, 2) <> Cells(i + 1, 2) Or Cells(i, 3) <> Cells(i + 1, 3) Then
    
    Rows("i:i").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Rows("i:i").Select
    ActiveSheet.Paste
    
    End If
    
    Wend
    
    End Sub
    0
    1. https://www.cjoint.com/c/IAiskulugsh

      Voici mon fichier dans lequel il y a mon amorce de code/ Je le remet ci-dessous aussi

      Sub tri()
      i = 2
      While i < 10
      If Cells(i, 7) <> 1 And Cells(i, 2) <> Cells(i + 1, 2) Or Cells(i, 3) <> Cells(i + 1, 3) Then

      Rows("i:i").Select
      Selection.Copy
      Sheets("Feuil2").Select
      Rows("i:i").Select
      ActiveSheet.Paste

      End If

      Wend

      End Sub
      0
      1. Modérateur
        Bonjour,

        Oui et ?

        Déjà.. il n'y a pas de Feuil2 dans ton classeur

        Ensuite... il n'y a rien de bien compliqué.... qu'as tu commencé à coder ?

        Car bon.. il suffit de faire une boucle sur tes lignes
        Vérifier à l'aide d'un IF si la valeur de la cellule est égale à 1 ou non
        Faire le "copier/coller"

        Reviens nous voir avec un début de code si tu bloques...

        NB: Pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage)
        Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

        0
        1. https://www.cjoint.com/c/IAiskulugsh
          0
        2. Modérateur
          @bobMe recoller le lien.... histoire de faire un "UP" de ton message n'a aucun intérêt...
          Je l'avais bien vu la première fois...... et il est toujours présent dans la discussion....

          J'allais te coller le code qui effectue ce que tu souhaites... mais me faire relancer de la sorte m’insupporte.
          Je viendrai donc le coller un un plus tard.... si j'y pense.
          0
        3. En fait ce N est pas le même. Jai remis le fichier avec la feuille 2 comme demandé. Afin qu'il soit plus à jour.
          Pas de soucis.
          J'attendais, mais merci quand même savoir pris un peut de ton temps pour moi.
          0
        4. Modérateur
          Aller... essaye ça :

          Il faut éviter au maximum les "select".
          Par contre, tu dois préciser les feuilles devant tes "Range" pour qu'excel sache entre quelle et quelle feuille il doit copier puis coller...

          Tu dois aussi, à chaque tour de boucle, regarder quelle est le numéro de la première ligne vide disponible pour ta feuille 2 afin d'y coller le contenu sans créer de trou.

          Un truc du genre
          Sub tri2()
              Dim Fsrc As Worksheet
              Dim Fcib As Worksheet
              Dim Derniere_Ligne As Long
              Dim FcibleLastRow As Long
              Dim rngSrc As Range
              Dim rngCib As Range
              
              Set Fsrc = Sheets("Feuil1") 'Feuille source
              Set Fcib = Sheets("Feuil2") ' Feuille Cible
                  
              'On compte le nombre de lignes dans la feuille 1
              Derniere_Ligne = Fsrc.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
              
              
              'On boucle dessus
              For i = 2 To Derniere_Ligne
                  
                  If Fsrc.Cells(i, 7) <> 1 And (Fsrc.Cells(i, 2) <> Fsrc.Cells(i + 1, 2) Or Fsrc.Cells(i, 3) <> Fsrc.Cells(i + 1, 3)) Then
                      Set rngSrc = Fsrc.Range("A" & i & ":" & "G" & i)
                      
                      'première ligne vide dispo, dans la  Feuille cible
                      FcibleLastRow = Fcib.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
                      Set rngCib = Fcib.Range("A" & FcibleLastRow & ":" & "G" & FcibleLastRow)
                  
                      rngCib.Value = rngSrc.Value ' on copie les valeurs de la plage cible vers la plage source
                End If
              Next
          
          
          End Sub
          
          0
        5. Je voudrais pas abuser de ta générosité. J'ai sûrement mal exprimé mon besoin. Mais il y a un début de réponse.
          Je m'explique :
          Dans la colonne 7 il y a des groupes de lignes . Du coup s'il est écrit 2 ou 4, alors le groupe se compose de la ligne sur lequel est écrit le chiffre est des lignes vides qui se trouvent directement au dessus, soit 1 ou 3 lignes pour cet exemple.
          Je voudrais donc copier-coller tous les groupes de lignes en entier, pour lesquels dans les colonnes 2 ou 3 il y a des chiffres qui diffèrent, entre les lignes du groupe.

          Je suis débutant sur VBA, d'où mes demandes.

          Merci à toit, et aux autres qui verrons mon message ;-)

          BOB
          0