Selection de lignes pleines dans un tableau

acidx Messages postés 32 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai un soucis sur Excel, je m'explique :
j'ai un tableau qui est un bon de commande qui fait 10 lignes mais selon les commandes, elle ne sont pas toujours toutes utilisées (il peux y avoir plus ou moins d'article). Le problème c'est que j'essais de mettre en place une macro pour mettre ce bon de commande dans une autre feuille qui est une sorte d'historique de tout les bons de commande qui sont les uns en dessous des autres. Mais comment la macro peut-elle savoir si elle doit copier que 2 lignes, 5 ou alors les 10 lignes (selon le nombre d'article dans la commande) ?
Avec une seule ligne j'y arrive mais là je ne trouve vraiment pas.

Si quelqu'un a une solution, je suis preneur !
Merci d'avance.

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    La macro peut contenir une boucle qui copie chaque ligne jusqu'à rencontrer une ligne vide, par exemple.
    1
    1. acidx Messages postés 32 Statut Membre
       
      Super ça devrais fonctionner ça, mais savez vous comment la faire ?
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Tu as déjà un début de macro, comme cela on complétera en tenant compte de ton contexte?
      0
    3. acidx Messages postés 32 Statut Membre
       
      Sub test2()
      '
      ' test2 Macro
      '

      '
      Sheets("Feuil1").Select
      Rows("7:7").Select
      Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
      Sheets("Bon de commande").Select
      Range("B10:E10").Select
      Selection.Copy
      Sheets("Feuil1").Select
      Range("C7:F7").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
      Application.CutCopyMode = False
      Sheets("Bon de commande").Select
      Range("B10").Select
      End Sub

      ---------------------------------------------------------------------------------------------------------------------------------

      Voilà pour le moment j'ai ça pour une ligne
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je propose ceci, non testé :
    Option Explicit
    Sub test2()
    '
    ' test2 Macro
    '
    Dim fsource As Worksheet, fdest As Worksheet
    Dim lsource As Long, ldest As Long
    
    Set fsource = Sheets("Bon de commande")
    Set fdest = Sheets("Feuil1")
    
    ldest = 1 + fdest.Cells(Rows.Count, "C").End(xlUp).Row 'dernière ligne occupée
    lsource = 1
    Do While fsource.Cells(lsource, 2).Value <> "" 'tant que la deuxième colonne n'est pas vide
        fdest.Cells(ldest, 3) = fsource.Cells(lsource, 2)
        fdest.Cells(ldest, 4) = fsource.Cells(lsource, 3)
        fdest.Cells(ldest, 5) = fsource.Cells(lsource, 4)
        fdest.Cells(ldest, 6) = fsource.Cells(lsource, 5)
        lsource = lsource + 1
        ldest = ldest + 1
    Loop
    '
    'Sheets("Feuil1").Select
    'Rows("7:7").Select
    'Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'Sheets("Bon de commande").Select
    'Range("B10:E10").Select
    'Selection.Copy
    'Sheets("Feuil1").Select
    'Range("C7:F7").Select
    'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    ':=False, Transpose:=False
    'Application.CutCopyMode = False
    Sheets("Bon de commande").Select
    Range("B10").Select
    End Sub
    0
    1. acidx Messages postés 32 Statut Membre
       
      Ça ne fonctionne pas, il ne copie toujours que la première ligne ... :/
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Et il y a des données dans la deuxième colonne des lignes suivantes?
      Comment déterminer quand s’arrêter de copier? J'ai choisi de continuer tant que la deuxième colonne était non vide. On peut continuer tant qu'une des 4 colonnes est non vide, si tu veux.
      0
    3. acidx Messages postés 32 Statut Membre
       
      c'est pas une question de colonne, mais de ligne. il faudrait continuer tant qu'une ligne est non vide
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Mieux ainsi, cela continue tant qu'une des 4 colonnes (de la ligne) n'est pas vide ?
    Option Explicit
    Sub test2()
    '
    ' test2 Macro
    '
    Dim fsource As Worksheet, fdest As Worksheet
    Dim lsource As Long, ldest As Long
    
    Set fsource = Sheets("Bon de commande")
    Set fdest = Sheets("Feuil1")
    
    ldest = 1 + fdest.Cells(Rows.Count, "C").End(xlUp).Row 'dernière ligne occupée
    lsource = 1
    Do While (fsource.Cells(lsource, 2).Value <> "") 
         or (fsource.Cells(lsource, 3).Value <> "")
         or (fsource.Cells(lsource, 4).Value <> "")
         or (fsource.Cells(lsource, 5).Value <> "")
              'tant que une des 4 colonnes n'est pas vide
        fdest.Cells(ldest, 3) = fsource.Cells(lsource, 2)
        fdest.Cells(ldest, 4) = fsource.Cells(lsource, 3)
        fdest.Cells(ldest, 5) = fsource.Cells(lsource, 4)
        fdest.Cells(ldest, 6) = fsource.Cells(lsource, 5)
        lsource = lsource + 1
        ldest = ldest + 1
    Loop
    '
    'Sheets("Feuil1").Select
    'Rows("7:7").Select
    'Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'Sheets("Bon de commande").Select
    'Range("B10:E10").Select
    'Selection.Copy
    'Sheets("Feuil1").Select
    'Range("C7:F7").Select
    'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    ':=False, Transpose:=False
    'Application.CutCopyMode = False
    Sheets("Bon de commande").Select
    Range("B10").Select
    End Sub
    0