Coller un tableau en enlevant les cellules vides dynamique

Grandinatus -  
via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Voici en PJ un tableau dont les colonnes se remplissent automatiquement : si 40 repas, alors 2 étiquettes de 18 barquettes (le max) et une de 4 barquettes sont générées. Les données sont générées de manière fictive pour créer un cadre qui ressemble au mien.
Avant de les imprimer, je voudrais créer un tableau en les concaténant de manière à ce que toutes les étiquettes crées forment une matrice sans blanc.
Je n'arrive ni à le coder avec des boucles IF ou LOOKUP, et mon niveau en VBA ne me permet pas de créer cela... Je suis bloqué car j'ai l'impression que les conditions s'ajoutent géométriquement.
J'espère que j'aurais correctement décris le soucis et qu'il saura générer de brillantes idées de votre côté.
Cordialement.


Macintosh / Chrome 105.0.0.0

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Bonjour

    Pour avoir une aide il faut joindre ton fichier, pas son image. Fichier à poster sur le site cjoint.com, faire créer un lien , le copier et revenir le coller ici.

    Dans l'attente

    Cdlmnt

    Via


    0
    1. Grandinatus
       

       https://cjoint.com/c/LIConVcYvY0

      voici le lien, désolé c'est ma première fois

      0
  2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Re,

    Ton fichier avec une macro pour coller sans vides en dessous

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

    Cdlmnt

    Via


    0
    1. Grandinatus
       

      Merci beaucoup ! 
      Comment puis-je faire pour le réaliser sur d'autres tableaux dans d'autres onglets ou fichiers ?
      Clt

      0
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Il suffit d'adapter les n)s de lignes et de colonnes

    macro avec explications :

    Sub sansvides()
    xr = 47 ' ligne avant celle où recopier en premier
    yr = 2 ' colonne où recopier en premier
    
    For y = 2 To 6 'boucle sur les colonnes de 2 à 6
    For x = 17 To 46 ' boucle sur les lignes  de 17 à 46
    If Cells(x, y) <> "" Then ' si cellule non vide
    xr = xr + 1 ' on incrémente la ligne de recopie de 1
    Cells(xr, yr) = Cells(x, y) ' on remplit la cellule avec le contenu de celle du premier tableau
    If xr = 77 Then xr = 47: yr = yr + 1 ' lorsque on atteint la igne 77 on revient à la ligne  47 et on incrémente de 1 la colonne de  recopie
    If yr = 7 Then yr = 8 ' si n° de col = 7 on passe à la colonne 8 (colonne d'espace)
    End If
    Next
    Next
    
    For y = 8 To 12
    For x = 17 To 46
    If Cells(x, y) <> "" Then
    xr = xr + 1
    Cells(xr, yr) = Cells(x, y)
    If xr = 77 Then xr = 47: yr = yr + 1
    If yr = 7 Then yr = 8
    End If
    Next
    Next
    
    For y = 17 To 18
    For x = 17 To 46
    If Cells(x, y) <> "" Then
    xr = xr + 1
    Cells(xr, yr) = Cells(x, y)
    If xr = 77 Then xr = 47: yr = yr + 1
    If yr = 7 Then yr = 8
    End If
    Next
    Next
    End Sub

    0
    1. Grandinatus
       

      Merci beaucoup,  cela m'a sauvé beaucoup de temps et d'énergie, je saurai comment le reproduire ! 
      Bonne journée

      0
    2. Grandinatus
       

       Rebonjour Via55,
      Merci encore de ce code que j'ai remis ici :

      xr = 16 ' ligne avant celle où recopier en premier
      yr = 20 ' colonne où recopier en premier
      
      For y = 2 To 6 'boucle sur les colonnes de 2 à 6
      For x = 17 To 46 ' boucle sur les lignes  de 17 à 46
      If Cells(x, y) <> "" Then ' si cellule non vide
      xr = xr + 1 ' on incrémente la ligne de recopie de 1
      Cells(xr, yr) = Cells(x, y) ' on remplit la cellule avec le contenu de celle du premier tableau
      If xr = 46 Then xr = 16: yr = yr + 1 ' lorsque on atteint la igne 46 on revient à la ligne 16 et on incrémente de 1 la colonne de  recopie
      End If
      Next
      Next
      
      For y = 2 To 6
      For x = 50 To 79
      If Cells(x, y) <> "" Then
      xr = xr + 1
      Cells(xr, yr) = Cells(x, y)
      If xr = 46 Then xr = 16: yr = yr + 1
      End If
      Next
      Next
      
      End Sub
      

      J'aimerais aussi coller la mise en forme du premier tableau dans le deuxième : 

      J'ai essayé cette commande mais sans résultats, aurais-tu une idée pour résoudre ça ?

      .PasteSpecial Paste:=xlFormats

       Merci beaucoup, bonne journée

      0
  4. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Re,

    Remplace

    Cells(xr, yr) = Cells(x, y) 

    par :

    Cells(x, y).Select
      Selection.Copy
       Cells(xr, yr).Select
        ActiveSheet.Paste

    Cdlment

    Via


    0