Array remplissant feuille excel, comment supprimer les lignes vides ?

fb62840

XLDnaute Impliqué
Bonjour à toutes et à tous,

Je collecte dans une array l'ensemble des valeurs (en ligne) contenu dans une feuille excel "base" (qui contient l'ensemble des enregistrements).
Sur la feuille base, les données sont saisies en colonne et le nombre de colonnes complétées est variable.

La macro dans le classeur joint fait ça :
- elle crée un nouveau classeur, nomme les feuilles et les remplie avec le contenu de l'array, la position des différents éléments de l'array est définie dans la macro, qu'il y ait une donnée dans la cellule ou que la cellule soit vide.

Cela a pour résultat de produire des feuilles avec parfois des lignes vides dont je n'ai pas besoin.

Pourriez vous m'aider à supprimer les lignes vides (seulement celles qui ont une correspondance dans l'array) ?

Merci beaucoup.
 

Pièces jointes

  • base.xls
    58 KB · Affichages: 55
  • base.xls
    58 KB · Affichages: 49
  • base.xls
    58 KB · Affichages: 62

francedemo

XLDnaute Occasionnel
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

bonjour

à essayer, j'ai ajouté une condition pour réaliser la copie

Code:
Sub test()
Dim Tablo, i As Long, Wkb As Workbook
    Tablo = ThisWorkbook.Sheets("Base").[A1].CurrentRegion.Value
    Set Wkb = Workbooks.Add
    For i = Wkb.Sheets.Count To 2 Step -1
        Application.DisplayAlerts = False
        Wkb.Sheets(i).Delete
        Application.DisplayAlerts = True
    Next i
    For i = 2 To UBound(Tablo, 1)
        With Wkb.Sheets(i - 1)
        If Tablo(i, 1) <> "" Then
            .Name = Tablo(i, 1)
            .[G1].Value = Tablo(i, 1)
            .[G2].Value = Tablo(i, 2)
            .[G3].Value = Tablo(i, 3)
            .[G4].Value = Tablo(i, 4)
            .[G5].Value = Tablo(i, 5)
            .[G6].Value = Tablo(i, 6)
            .[G7].Value = Tablo(i, 7)
            .[G8].Value = Tablo(i, 8)
            .[C1].Value = Tablo(i, 9)
            .[C2].Value = Tablo(i, 10)
            .[B11].Value = Tablo(i, 11)
            .[B12].Value = Tablo(i, 12)
            .[B13].Value = Tablo(i, 13)
            .[D13].Value = Tablo(i, 14)
            .[D14].Value = Tablo(i, 15)
            .[D15].Value = Tablo(i, 16)
            .[D16].Value = Tablo(i, 17)
            .[D19].Value = Tablo(i, 18)
            .[D20].Value = Tablo(i, 19)
            .[D21].Value = Tablo(i, 20)
            .[D22].Value = Tablo(i, 21)
            .[D24].Value = Tablo(i, 22)
            .[D25].Value = Tablo(i, 23)
            .[D26].Value = Tablo(i, 24)
            .[D27].Value = Tablo(i, 25)
            .[D31].Value = Tablo(i, 26)
            .[D32].Value = Tablo(i, 27)
            .[D33].Value = Tablo(i, 28)
            .[D34].Value = Tablo(i, 29)
            .[D37].Value = Tablo(i, 30)
            .[D38].Value = Tablo(i, 31)
            .[D39].Value = Tablo(i, 32)
            .[D40].Value = Tablo(i, 33)
            .[D44].Value = Tablo(i, 34)
            .[D45].Value = Tablo(i, 35)
            .[D46].Value = Tablo(i, 36)
            .[D47].Value = Tablo(i, 37)
            .[D48].Value = Tablo(i, 38)
            .[D51].Value = Tablo(i, 39)
            .[D52].Value = Tablo(i, 40)
            .[D53].Value = Tablo(i, 41)
            .[D54].Value = Tablo(i, 42)
            .[D55].Value = Tablo(i, 43)
            .[D58].Value = Tablo(i, 44)
            .[D59].Value = Tablo(i, 45)
            .[D60].Value = Tablo(i, 46)
            .[D61].Value = Tablo(i, 47)
            .[D62].Value = Tablo(i, 48)
            .[D65].Value = Tablo(i, 49)
            .[D66].Value = Tablo(i, 50)
            .[D67].Value = Tablo(i, 51)
            .[D68].Value = Tablo(i, 52)
            .[D69].Value = Tablo(i, 53)
            .[D72].Value = Tablo(i, 54)
            .[D73].Value = Tablo(i, 55)
            .[D74].Value = Tablo(i, 56)
            .[D75].Value = Tablo(i, 57)
            .[D76].Value = Tablo(i, 58)
            .[B78].Value = Tablo(i, 59)
            .[B79].Value = Tablo(i, 60)
            .[B80].Value = Tablo(i, 61)
            .[B81].Value = Tablo(i, 62)
        End If
        End With
        If i < UBound(Tablo, 1) Then Wkb.Sheets.Add After:=Wkb.Sheets(Wkb.Sheets.Count)
    Next i
End Sub
 

Misange

XLDnaute Barbatruc
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Bonjour

merci de supprimer ton classeur et d'en remettre un avec des données ANONYMISEES. Ces personnes n'ont pas nécessairement envie que leur adresse figure sur un forum public...
 

fb62840

XLDnaute Impliqué
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Bonjour,

Merci pour cette réponse rapide.
Je viens de tester, malheureusement cela ne marche pas, les lignes vides sont toujours là.

Cordialement
 

fb62840

XLDnaute Impliqué
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Bonjour,

Merci pour cette vigilance.

Toutes les infos présentes dans le fichiers sont fictives.
Toute ressemblance... serait véritablement involontaire.

Cordialement
 

francedemo

XLDnaute Occasionnel
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

remet ton fichier avec en feuille Base ce que tu as (ça c'est déjà fait) et en feuille2 ou autre ce que tu voudrais avoir après que la macro ait fait son traitement
à+
 

fb62840

XLDnaute Impliqué
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Bonjour,

Voici en pièce jointe :
premier onglet : la base
2nd : le résultat produit par la macro
3ème : le résultat attendu (une mise en forme ultérieure sera appliquée afin d'obtenir une présentation acceptable)

Merci pour votre aide
 

Pièces jointes

  • baseV3.xls
    65.5 KB · Affichages: 50

Misange

XLDnaute Barbatruc
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Comme c'est un peu longuet à corriger continue selon le principe suivant :

Code:
        If Tablo(i, 1) <> "" Then
            .Name = Tablo(i, 1)
            
            
            b = 1
                For a = 1 To 8
                    If Tablo(1, b) <> "" Then .Range("G" & a).Value = Tablo(1, b): a = a + 1: b = b + 1
                Next a
                For a = 1 To 2
                    If Tablo(1, b) <> "" Then .Range("C" & a).Value = Tablo(1, b): a = a + 1: b = b + 1
                Next a
                For a = 11 To 13
                    If Tablo(1, b) <> "" Then .Range("B" & a).Value = Tablo(1, b): a = a + 1: b = b + 1
                Next a
                For a = 13 To 16
                    If Tablo(1, b) <> "" Then .Range("D" & a).Value = Tablo(1, b): a = a + 1: b = b + 1
                Next a
 

fb62840

XLDnaute Impliqué
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Ok, je vais faire ça et je reviens pour indiquer si cela fonctionne comme attendu.

En tout cas, un grand merci pour le temps que vous m'avez consacré.
 

Misange

XLDnaute Barbatruc
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Correction :
For a = 1 To 8
If Tablo(1, b) <> "" Then .Range("G" & a).Value = Tablo(1, b): a = a + 1
b = b + 1
next a

sinon tu n'incrémentes b que lorsque tablo(1,b) est non vide
 

fb62840

XLDnaute Impliqué
Re : Array remplissant feuille excel, comment supprimer les lignes vides ?

Bonjour,

Il doit y avoir quelque chose qui cloche car en modifiant le code pour y ajouter les règles de traitement sur les lignes, les informations attendues ne se placent pas au bon endroit. Et, lorsque l'on est en présence d'un vide "" alors il reporte l'intitulé de colonne de la base dans la cellule alors qu'elle devrait rester vide.

En pièce-jointe le fichier avec les lignes For ajoutées.

Cordialement

Correction :
For a = 1 To 8
If Tablo(1, b) <> "" Then .Range("G" & a).Value = Tablo(1, b): a = a + 1
b = b + 1
next a

sinon tu n'incrémentes b que lorsque tablo(1,b) est non vide
 

Pièces jointes

  • baseV5.xls
    66 KB · Affichages: 44

Discussions similaires