Coller un tableau en enlevant les cellules vides dynamique

Fermé
Grandinatus - 28 sept. 2022 à 15:40
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 - 30 sept. 2022 à 16:40

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

A voir également:

4 réponses

via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
28 sept. 2022 à 15:49

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

 https://cjoint.com/c/LIConVcYvY0

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

0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
28 sept. 2022 à 20:55

Re,

Ton fichier avec une macro pour coller sans vides en dessous

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

Cdlmnt

Via


0

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

0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
28 sept. 2022 à 22:37

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

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

0

 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
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
30 sept. 2022 à 16:40

Re,

Remplace

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

par :

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

Cdlment

Via


0