supprimer des lignes vides dans un tableau

hicham8338

XLDnaute Nouveau
bonjour,
j'aimerai savoir comment faire pour supprimer des lignes vides dans une plage de données?

j'ai une macro qui m'execute des tableaux les uns à la suite des autres avec un decalage aléatoire que je n'arrive pas à résoudre, du coup j'ai pensé à supprimer les lignes vides entre mes tableaux, mais je ne sais pas l'ecrire en vba

je joins mon code qui copie les tableaux

For xa = 2 To Int(Cells(5, 5).Value / 1000 + 2)


'' ecrit dans la cellule expansion row de report result

Worksheets("Report Results").Activate
ActiveSheet.Unprotect ("osoft")
''ActiveSheet.Cells(25, 3) = Worksheets("Technical 1").Cells(xa, 9).Value

ActiveSheet.Cells(25, 3) = "='Technical 1'!$I$" & xa
'' cette application genere des données
Application.Run ("MNU_ETOOLS_EXPANDANDREFRESH")
" cette application ecrit dans les cellules (1,6) la longueur du tableau et (1,5) l'indice de la derniere colonne
Application.Run ("taille_tableau")

Worksheets("Report Results").Activate
''si xa = 2 copie le tableau avec les entetes
If xa = 2 Then

ActiveSheet.Range(Cells(5, 7), Cells(5 + Cells(1, 6).Value, Cells(1, 5).Value)).Select
Selection.Copy
''si xa <> 2 copie que les valeurs sans l'entete

Else
ActiveSheet.Range(Cells(7, 7), Cells(5 + Cells(1, 6).Value, Cells(1, 5).Value)).Select
Selection.Copy
End If

Dim difrow As Integer
Dim prodcol As Integer
Dim prod As Integer

''difrow est la longueur du tableau

difrow = Cells(1, 6).Value
'' prod est l'indice de la ligne ou on copie en premier
prod = difrow * (xa - 2)
'' prod est l'indice de la derniere ligne qu'on copie
prodcol = difrow * (xa - 1)

Worksheets("tableau").Activate
ActiveSheet.Unprotect ("osoft")

'' selection d'une plage correspondant à la taille du tableau qu'on va copier

Range(Cells(5 + prod, 7), Cells(5 + prodcol, Cells(1, 5).Value)).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Worksheets("Report Results").Select
Application.CutCopyMode = False
Cells(5, 5).Select

Next


merci de votre aide
Hicham
 

Gorfael

XLDnaute Barbatruc
Re : supprimer des lignes vides dans un tableau

Salut hicham8338
J'ai commencé à regarder ton code et j'ai des petits soucis de compréhension :
Il y a des ligne de code que tu as passé en commentaires ?

Tu utilise l'instruction Cells. Pour tout ce qui est compteur de colonne, c'est bien, mais pourquoi systèmatiquement ? Pourquoi pas Range qui est quand même plus lisible ?

Dans ta boucle, tu utilises des instructions Dim : pas glop, pas glop
ça ne sert à rien, alors autant regrouper tes déclaration au même endroit

Dim difrow As Integer
Dim prodcol As Integer
Dim prod As Integer


For xa = 2 To Int(Range("E5") / 1000 + 2)


'' ecrit dans la cellule expansion row de report result
Worksheets("Report Results").Activate
ActiveSheet.Unprotect ("osoft")
''ActiveSheet.range("C25") = Worksheets("Technical 1").Range("I" & xa)
C'est un commentaire ?


ActiveSheet.range("C25") = "='Technical 1'!$I$" & xa (?)
la valeur de C25 doit être une formule ? Dans ce cas, ça ressemblerais plutôt à
ActiveSheet.range("C25").Formula = "='Technical 1'!$I$" & xa


'' cette application genere des données
Application.Run ("MNU_ETOOLS_EXPANDANDREFRESH")
" cette application ecrit dans les cellules (1,6) (F1)la longueur du tableau et (1,5)(E1) l'indice de la derniere colonne
Application.Run ("taille_tableau")

Worksheets("Report Results").Activate
''si xa = 2 copie le tableau avec les entetes
If xa = 2 Then

ActiveSheet.Range(Cells(5, 7), Cells(5 + Cells(1, 6).Value, Cells(1, 5).Value)).Select
Comprend pas ce que tu cherches à faire :
Range(texte en G5 désignant une plage, texte en cellule(colonne tableau et ligne longueur Tableau +5) tu compie la valeur de ces 2 cellules ?

Selection.Copy
''si xa <> 2 copie que les valeurs sans l'entete

Else
ActiveSheet.Range(Cells(7, 7), Cells(5 + Cells(1, 6).Value, Cells(1, 5).Value)).Select
Selection.Copy
End If
J'arrête, je suis perdu
''difrow est la longueur du tableau

difrow = Cells(1, 6).Value
'' prod est l'indice de la ligne ou on copie en premier
prod = difrow * (xa - 2)
'' prod est l'indice de la derniere ligne qu'on copie
prodcol = difrow * (xa - 1)

Worksheets("tableau").Activate
ActiveSheet.Unprotect ("osoft")

'' selection d'une plage correspondant à la taille du tableau qu'on va copier

Range(Cells(5 + prod, 7), Cells(5 + prodcol, Cells(1, 5).Value)).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Worksheets("Report Results").Select
Application.CutCopyMode = False
Cells(5, 5).Select

Next
Je ne comprends pas du tout ce que tu essaies de faire :tu parles d'un code pour supprimer des lignes vides, mais ce que tu joints n'a rien à voir

Tu utilises l'instruction Cells correctement, certes, mais c'est dur à décrypter, sans les données contenues dans les cellules référencées.

Je ne suis pas sûr de tes instruction Range :
Range("A1","C10").select veut dire que tu sélectionnes uniquement la cellule A1 et la cellule C10. Toi, ce n'est même pas aussi direct, puisque la référence des 2 cellules sont données de manière indirecte par le contenu d'autre cellule

à chaque passage de ta boucle tu redéfinis la formule de C25. Pourquoi ? Tu ne peux pas mettre directement la valeur ? Il y a une raison pour que ce soit une formule ?

Un p'tit fichier exemple ne serait pas de refus et une explication de ce que ta macro est censée faire non, plus.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 789
Messages
2 092 124
Membres
105 224
dernier inscrit
frederic.bonnet@alstomgro