Supprimer les lignes vides d'une variable tableau

Bonjour à tous,

J'ai un fichier structuré avec des colonnes précises.
Chaque jour je dois y importer par macro des données externes. Cependant, des colonnes peuvent régulièrement être ajoutée dans ces imports qui ne m'intéressent pas. Mais cela décale le numéro des colonnes.
Pour éviter tout problème, je cherche donc dans un premier temps le numéro de colonne via le nom de celle-ci (x1,x2,...).

Ensuite je copie dans une variable tableau les différentes lignes en ne prenant que les colonnes qui m'intéressent sous réserve que le numéro du dossier de la ligne n'existe pas déjà dans mon tableau.

Jusque là je n'ai aucun soucis. Cependant quand une partie des lignes existe déjà dans mon tableau, la variable tableau ne les copie pas mais me met des lignes vides à la place.

Du coup je ne sais pas malgré de nombreuses recherches comment soit supprimer les lignes vides de la variable tableau (j'ai vu des posts mais honnêtement je n'arrive pas à comprendre) ou faire en sorte que la variable tableau ne créé pas de ligne vide pour les numéros de dossiers déjà existants.

Je vous joints la partie de code qui concerne ces éléments. Je ne peux pas joindre de fichier malheureusement pour des raisons de confidentialité.

Merci par avance pour votre aide.

Cordialement
Rhyukane

For i = 0 To lastRow 'lance la boucle de la ligne 0 de la variable tableau à la dernière ligne
If TS.ListColumns("Numéro de dossier").DataBodyRange.Find(Cells(i + 2, x2).Value) Is Nothing Then 'vérifie si le numéro de dossier n'existe pas déjà dans l'onglet de destination avant de lancer la boucle pour chaque ligne
tableau(i, 0) = .Cells(i + 2, x1).Value
tableau(i, 1) = .Cells(i + 2, x2).Value
tableau(i, 2) = CDate(.Cells(i + 2, x3).Value)
tableau(i, 3) = .Cells(i + 2, x4).Value
tableau(i, 4) = .Cells(i + 2, x5).Value
tableau(i, 5) = .Cells(i + 2, x6).Value
tableau(i, 6) = .Cells(i + 2, x7).Value
tableau(i, 7) = .Cells(i + 2, x8).Value
tableau(i, 8) = .Cells(i + 2, x9).Value
tableau(i, 9) = .Cells(i + 2, x10).Value
tableau(i, 10) = CDate(.Cells(i + 2, x11).Value)
tableau(i, 11) = .Cells(i + 2, x12).Value
tableau(i, 12) = .Cells(i + 2, x13).Value
tableau(i, 13) = .Cells(i + 2, x14).Value
tableau(i, 14) = .Cells(i + 2, x15).Value
tableau(i, 15) = .Cells(i + 2, x16).Value
tableau(i, 16) = .Cells(i + 2, x17).Value
tableau(i, 17) = .Cells(i + 2, x18).Value
tableau(i, 18) = .Cells(i + 2, x19).Value
tableau(i, 19) = .Cells(i + 2, x20).Value
tableau(i, 20) = .Cells(i + 2, x21).Value
tableau(i, 21) = .Cells(i + 2, x22).Value
tableau(i, 22) = .Cells(i + 2, x23).Value
tableau(i, 23) = .Cells(i + 2, x24).Value
If x25 <> "" Then
tableau(i, 24) = .Cells(i + 2, x25).Value
End If
tableau(i, 25) = .Cells(i + 2, x26).Value
tableau(i, 26) = .Cells(i + 2, x27).Value
tableau(i, 27) = .Cells(i + 2, x28).Value
End If 'fin de la condition vérifiant si le numéro de dossier existe déjà
Next i 'passe la boucle à la ligne suivante

OD.Range("A" & TS.ListRows.Count + 2).Resize(UBound(tableau, 1) - (LBound(tableau, 1)), UBound(tableau, 2)) = tableau 'copie la variable tableau dans la tableau structuré de l'onglet OD
TS.Resize TS.Range.Resize(OD.Cells(Rows.Count, 1).End(xlUp).Row, TS.ListColumns.Count) 'redimensionne de tableau structuré de destination avec les nouvelles lignes ajoutées

Bonsoir,

pas facile sans fichier !

Bon j'ai créé une variable tableau qui va mettre en mémoire le numéro des colonnes que vous voulez extraire. Cette partie n'est pas fini car vous ne montrez pas comment vous affectez les numéros à vos différentes variables "x".

L'avantage de mettre ces colonnes en tableau c'est de pouvoir "tourner" dessus pour éviter des recopies de ligne de codes identiques.
deux test en fonction de "j" sont fait pour les valeur de la colonnes "11" et "25".

A voir si vous pouvez adapter ceci pour simplifier le code...

Sinon pour éviter d'inscrire des données vides dans le tableau, j'ai mis en place un comptage de valeurs vides sur la plage des colonnes, il faut évidemment qu'il n'y ait pas de "trous" dans cette suite de colonne sinon avec un fichier ce serait plus simple..., si le nombre de cellules vide correspond pas au nombres de colonnes alors c'est qu'il y a des données donc on remplie le tableau.

Le code :

    Dim Tablo(1 To 28)
    ' mise en mémoire du numéro des colonnes en fonctions de leur nom
    ' à voir comment faire cela...
    For i = 1 To 28
        Tablo(i) = "x" & i
    Next i
    'lance la boucle de la ligne 0 de la variable tableau à la dernière ligne
    For i = 0 To lastRow
        'vérifie si le numéro de dossier n'existe pas déjà dans l'onglet de destination avant de lancer la boucle pour chaque ligne
        If TS.ListColumns("Numéro de dossier").DataBodyRange.Find(Cells(i + 2, x2).Value) Is Nothing Then
            ' on compte le nombre de valeurs vide de la ligne i, si <> au nombre de colonne alors il y a des données
            ' on lance la boucle d'intégration dans le tableau
            If CountIf(Range(.Cells(i + 2, x1), Cells(i + 2, x28), "")) <> 28 Then
                ' nouvelle boucle sur les colonnes afin de simplifier le code
                For j = 1 To 28
                    tableau(i, j - 1) = .Cells(i + 2, Tablo(j)).Value
                    ' valeur particulière en fonction du nom des colonnes
                    If j = 11 Then tableau(i, 10) = CDate(.Cells(i + 2, Tablo(j)).Value)
                    If j = 25 And Tablo(j) <> "" Then tableau(i, 10) = CDate(.Cells(i + 2, Tablo(j)).Value)
                Next j
            End If
        End If 'fin de la condition vérifiant si le numéro de dossier existe déjà
    Next i 'passe la boucle à la ligne suivante
    'copie la variable tableau dans la tableau structuré de l'onglet OD
    OD.Range("A" & TS.ListRows.Count + 2).Resize(UBound(tableau, 1) - (LBound(tableau, 1)), UBound(tableau, 2)) = tableau
    'redimensionne de tableau structuré de destination avec les nouvelles lignes ajoutées
    TS.Resize TS.Range.Resize(OD.Cells(Rows.Count, 1).End(xlUp).Row, TS.ListColumns.Count)

Si ce n'est pas la solution cela peut-être vous ouvrira des champs des possibles !

@ bientôt

LouReeD

Rechercher des sujets similaires à "supprimer lignes vides variable tableau"