OVH Cloud OVH Cloud

Supprimer des plages de lignes dans un tableau

17 réponses
Avatar
Roland Miller
Bonjour,

Dison que le tableau a 5000 lignes.

Par la fonction .SpecialCells(xlCellTypeBlanks).EntireRow.Select je s=C3=A9=
lectionne les lignes vides. Cela prend une seconde!

Je veux ensuite supprimer ces lignes. Je fais ensuite un Selection.entirero=
w.delete. Je souhaiterais =C3=A9vider de faire une boucle.

Cela fonctionne mais prend beaucoup plus de temps que je le souhaiterais.

N'y aurait-il pas un truc ou une fa=C3=A7on de faire? Merci =C3=A0 l'avance=
.

7 réponses

1 2
Avatar
MichD
Le 25/07/19 à 09:30, Roland Miller a écrit :
Bonjour,
Si ça peut aider …
Var_Selection1 = Feuil54.Range( _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row + 1, Feuil54.Range("CN_FMDetTotIdentifZone").Column), _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row + Feuil54.Range("CN_FMDetTotIdentifZone").Rows.Count - 2, Feuil54.Range("CN_FMDetTotIdentifZone").Column)).SpecialCells(xlCellTypeBlanks).Offset(0, -36).Address
Var_Selection2 = Feuil54.Range( _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row + 1, Feuil54.Range("CN_FMDetTotIdentifZone").Column), _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row + Feuil54.Range("CN_FMDetTotIdentifZone").Rows.Count - 2, Feuil54.Range("CN_FMDetTotIdentifZone").Column)).SpecialCells(xlCellTypeBlanks).Offset(0, -35).Address
Feuil54.Range(Var_Selection1, Var_Selection2).Select
Feuil54.Range(Var_Selection1, Var_Selection2).merge true
ou selection.merge true

Ce code fonctionne? Par conséquent, tu as résolu le problème résolu! Bravo.
Feuil54.Range( _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row + 1,
Feuil54.Range("CN_FMDetTotIdentifZone").Column), _
Feuil54.Cells(Feuil54.Range("CN_FMDetTotIdentifZone").Row +
Feuil54.Range("CN_FMDetTotIdentifZone").Rows.Count - 2,
Feuil54.Range("CN_FMDetTotIdentifZone").Column)).SpecialCells(xlCellTypeBlanks).Offset(0,
-36).UnMerge
Je n'ai pas testé, mais ce qui suit est l'équivalent. Pour moi, la
lecture du code devient plus simple! C'est une question de goût...
With Feuil54
With .Range("CN_FMDetTotIdentifZone")
.Range(.Cells(.Row + 1, .Column), .Cells(.Row + Rows.Count - 2,
.Column)).SpecialCells(xlCellTypeBlanks).Offset(0, -36).UnMerge
End With
End With
On pourrait même raccourcir ce code, si ta plage nommées est déclarée au
niveau du classeur et non de la feuille comme ceci :
With Range("CN_FMDetTotIdentifZone")
.Range(.Cells(.Row + 1, .Column), .Cells(.Row + Rows.Count - 2,
.Column)).SpecialCells(xlCellTypeBlanks).Offset(0, -36).UnMerge
End With
MichD
Avatar
MichD
si ton problème n'est pas résolu,
Donne-moi l'adresse de la plage nommée "CN_FMDetTotIdentifZone" et
l'adresse des cellules fusionnées.
Après ton tri, il y a de fortes chances que ces cellules soient
déplacées et par conséquent, qu'elles aient une nouvelle adresse.
Tu veux fusionner la plage de cellules originales et de la plage nommée
et des cellules fusionnées ou leurs nouvelles adresses suite au tri?
J'y jetterai un oeil cet après-midi.
MichD
Avatar
Roland Miller
Encore merci.
Mais …
Concernant Donne-moi l'adresse de la plage nommée "CN_FMDetTotIdentifZ one"
Disons … AP15:AP7800
et l'adresse des cellules fusionnées … bien je peux difficilem ent donner l'adresse de celles-ci car ce sont plusieurs plages de cellules dans la colonne F … une fois défusionnées. Elles sont le résultat du SpecialCells(XLTypeBlanks.
Une fois le tri effectué … il est facile de sélectionner de nouveau ces mêmes cellules car je refais tout simplement le Special Cells(XLTypeBlanks dans la colonne AP (CN_FMDetTotIdentifZone)
Lorsque je relis ce que vous avez écrit … je me dis que peut- être que ce n'est pas clair. Si ça peux aider ...
Par exemple …
- Suite au Specialcells(XLTypeBlanks … disons que j'ai les cellules F10:G10, F129:G129, F7800:G7800 de sélectionnées.
- Je fais Selection.Unmerge. Alors … je me retrouve avec les cellul es F10, F129, F7800 de sélectionnées.
- Vu que ces cellules ne sont plus fusionnées … cela me permet de faire un tri et alors de supprimer d'autres lignes … augmentant de façon importante la rapidité de la suppression des lignes.
- Oui les cellules défusionnées … ne sont plus à la même adresse. Mais on s'en fou car en faisant de nouveau le SpecialCel ls(XLTypeBlanks sur la colonne AP (CN_FMDetTotIdentifZone)je sélection ne à nouveau les cellules dans la colonne F. (Offset(0,-36)
- À ce moment disons que jai les cellules F17, F95, F7532 sont sé lectionnées suite au SpecialCells(XLTypeBlanks.
- C'est là que je cherche à faire un merge avec les cellules de l a colonne G … sans faire de boucle.
- Par exemple je voudrais fusionner F17 avec G17, F95 avec G95, F7532 avec G7532.
- Dans mon exemple je donne seulement 3 cellules. Mais en réalité il peut en avoir 700.
Avatar
MichD
Je t'ai fait un fichier exemple. Comme je n'ai pas vu ton fichier, tu
devras possiblement faire des ajustements.
https://www.cjoint.com/c/IGzsdgLPaZj
MichD
Avatar
MichD
Le 25/07/19 à 14:06, MichD a écrit :
Je t'ai fait un fichier exemple. Comme je n'ai pas vu ton fichier, tu
devras possiblement faire des ajustements.
https://www.cjoint.com/c/IGzsdgLPaZj
MichD

Tu peux ajouter en début de procédure, dans la procédure générale :
Application.ScreenUpdating = False
Dans ta procédure générale, tu peux seulement appeler les procédures au
moment opportun
Call NomDeLaProcédure
et la mettre à True à la fin de la procédure.
MichD
Avatar
Roland Miller
Merci … beaucoup. Je vais adapter et tester et vous revenir avec le feedback.
Je serais curieux d'avoir votre opinion sur ceci.
Dans cette feuille … j'ai actuellement presque 7900 lignes sur lesq uelles je devrai faire des filtres.
À votre avis et selon votre expérience … disons que j'aur ais plutôt 40 000 lignes … sur lesquelles je devrai aussi fair e des filtres … y verrait-on des problèmes de lenteur, afficha ge ou autres?
Avatar
MichD
Le 26/07/19 à 10:12, Roland Miller a écrit :
y verrait-on des problèmes de lenteur

Pas vraiment, cela dépend aussi du nombre de colonnes et de la
complexité des formules que l'on peut utiliser sur des critères
multiples dans des filtres avancés. Cela devrait bien se passer!
MichD
1 2