Copier cellules non vides dans un tableau

Bonjour à toutes et à tous.

Je voudrais coller les cellules non vides d'un tableau dans un autre.

J'ai essayer avec

=SIERREUR(INDEX(Feuil1!$AL$2:$AL$22;PETITE.VALEUR(SI(ESTVIDE(Feuil1!$AL$2:$AL$22)=VRAI;LIGNE(Feuil2!$1:$21));LIGNES($1:1));1);"")

mais ceal ne fonctionne pas comme je le souhaiterais, il reste des cellules vide dans le second tabelau.

Je joins un exemple.

si quelqu'un peut m'aider, merci d'avance.

3test1.xlsx (11.64 Ko)

Bonjour Ldopa, bonjour le forum,

Bien trop nul en formule pour espérer te trouver une solution, je te propose un solution VBA avec le code ci-dessous... On ne sait jamais...

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Derniere Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
OD.Cells.ClearContents 'vide les anciennes données de l'onglet destination
DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet source
TV = OS.Range("A1:A" & DL) 'définit le tableau des valeurs TV
For I = 1 To DL 'bouce sur toutes les lignes I du tableau des valeurs
    If TV(I, 1) <> "" Then 'condition : si la donnée ligne I colonne 1 de TV n'est pas vide
        K = K + 1 'incrémente K
        ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
        TL(K) = TV(I, 1) 'récupère dans la ligne K de TL la donnée ligne I de TV
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
'si K est supérieure a zéro, renvoie dans A1 redimensionnée de l'onglet OD, le tableau TL transposé
If K > 0 Then OD.Range("A1").Resize(K, 1).Value = Application.Transpose(TL)
End Sub

Bonjour ThauThème

Désolé de répondre ci tardivement, mais j'étais sur un autre projet.

Merci pour ton aide, cela fontionne très bien.

Une question si l'on développe un peu les lignes de code, peut on appliquer cela à une feuille ou il y a 4 tableaux juxtaposés.

Merci d'avance.

Bonjour Ldopa, bonjour le forum,

Pas compris la question. Envoie un fichier exemple...

Bonjour Thau Thème

Désolé pour le retars.

Je te joins un exemple. Est il possible de regrouper les lignes non vides ?

MErci d'avance.

2test21.xlsx (16.58 Ko)

Bonjour Ldopa, bonjour le forum,

Ça donnerait ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Derniere Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim C As Integer 'déclare la variable C (Colonne)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
OD.Cells.ClearContents 'vide les anciennes données de l'onglet destination
OD.Columns("A:D").NumberFormat = "@" 'mise au format des colonnes 1 à 4 de l'onglet destination
For COL = 1 To 37 Step 12 'boucle 1 : sur les colonne 1 à 37 par pas de 13
    K = 0: Erase TL 'initialise K et vide TL
    DL = OS.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet source
    TV = OS.Range(OS.Cells(1, COL), OS.Cells(DL, COL)) 'définit le tableau des valeurs TV
    For I = 1 To DL 'bouce 2 : sur toutes les lignes I du tableau des valeurs
        If TV(I, 1) <> "" Then 'condition : si la donnée ligne I colonne 1 de TV n'est pas vide
            K = K + 1 'incrémente K
            ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
            TL(K) = TV(I, 1) 'récupère dans la ligne K de TL la donnée ligne I de TV
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    C = C + 1 'incrémente C
    'si K est supérieure a zéro, renvoie dans á cellule ligne 1 colonne C redimensionnée de l'onglet OD, le tableau TL transposé
    If K > 0 Then OD.Cells(1, C).Resize(K, 1).Value = Application.Transpose(TL)
Next COL 'prochaine colonne de la boucle 1
End Sub

Bonjour Thau Thème.

Je viens de tester et cela fonctionne parfaitement.

Merci, et à te relire

Je clos le post

Rechercher des sujets similaires à "copier vides tableau"