supprimer des lignes vides dans un tableau

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
507
Retour