OVH Cloud OVH Cloud

Handicapé de VBA....

4 réponses
Avatar
Georges Schell
Bonjour tout le monde,

J'ai un très volumineux fichier à traiter pour en extraire des adresses (18
000 lignes...).
J'ai besoin de faire la chose suivante :
€ Sélectionner la colonne 1
€ Rechercher le texte "ZZZZZ"
€ tant qu'il est trouvé, sélectionner de la ligne précédente à 2 lignes
après,
€ supprimer les lignes sélectionnées (ou bien supprimer sans sélectionner)
EX : le texte est trouvé en ligne 1013, on doit supprimer de 1012 à 1015.

J'ai commencé à le faire à la main, mais c'est beaucoup trop long...

Une bonne âme aura-t-elle pitié d'un ignorant en lui rédigeant la petite
macro ad hoc ?

Merci d'avance à cet éventuel bienfaiteur !

Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !

4 réponses

Avatar
Daniel
Bonjour.
Le texte représente-t-il la valeur de la cellule ou une partie de celle-ci ?
Cordialement.
Daniel
"Georges Schell" a écrit dans le message de news:
BEBA684F.26AE0%
Bonjour tout le monde,

J'ai un très volumineux fichier à traiter pour en extraire des adresses
(18
000 lignes...).
J'ai besoin de faire la chose suivante :
? Sélectionner la colonne 1
? Rechercher le texte "ZZZZZ"
? tant qu'il est trouvé, sélectionner de la ligne précédente à 2 lignes
après,
? supprimer les lignes sélectionnées (ou bien supprimer sans sélectionner)
EX : le texte est trouvé en ligne 1013, on doit supprimer de 1012 à 1015.

J'ai commencé à le faire à la main, mais c'est beaucoup trop long...

Une bonne âme aura-t-elle pitié d'un ignorant en lui rédigeant la petite
macro ad hoc ?

Merci d'avance à cet éventuel bienfaiteur !

Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !




Avatar
JCR
Bonjour,
en bricolant :

on insère une colonne avant la colonne A on y copie cette formule :
=SI(OU(B10="zzzz";B11="zzzz";B12="zzzz";B13="zzzz");1;0)

Un copier / collage spécial / valeur

et ensuite cette petite macro :

For i = [a65536].End(xlUp).Row To 2 Step -1
If Cells(i, 1) = 1 Then Rows(i).Delete
Next

Espérant vous avoir aidé.

JC de Reynal


"Georges Schell" a écrit dans le message de news:
BEBA684F.26AE0%
Bonjour tout le monde,

J'ai un très volumineux fichier à traiter pour en extraire des adresses
(18
000 lignes...).
J'ai besoin de faire la chose suivante :
? Sélectionner la colonne 1
? Rechercher le texte "ZZZZZ"
? tant qu'il est trouvé, sélectionner de la ligne précédente à 2 lignes
après,
? supprimer les lignes sélectionnées (ou bien supprimer sans sélectionner)
EX : le texte est trouvé en ligne 1013, on doit supprimer de 1012 à 1015.

J'ai commencé à le faire à la main, mais c'est beaucoup trop long...

Une bonne âme aura-t-elle pitié d'un ignorant en lui rédigeant la petite
macro ad hoc ?

Merci d'avance à cet éventuel bienfaiteur !

Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !




Avatar
LSteph
Bonjour ,

???s'il est aussi en 1012 faudrait ti supprimer 1011
aussi voici
Donc en imaginant qu'il n'y ait pas de "zzzzz" consécutifs à moins de 4
lignes
(un truc qui n'irait pas sinon)
et que l'on accepte Maj ou Min

'****
Sub dzzzzzerbant()
Application.ScreenUpdating = False
Rows(18000).Select
Do While Selection.Row > 1
If UCase(Selection.Cells(1)) Like "*ZZZZZ*" Then
Range(Selection.Offset(-1, 0), _
Selection.Offset(2, 0)).EntireRow.Select
Selection.Rows.Delete
End If
Selection.Offset(-1, 0).Rows(1).Select
Application.StatusBar = "Traitement Ligne :" & Selection.Row
Loop
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

'****
'lSteph

"Georges Schell" a écrit dans le message de news:
BEBA684F.26AE0%
Bonjour tout le monde,

J'ai un très volumineux fichier à traiter pour en extraire des adresses
(18
000 lignes...).
J'ai besoin de faire la chose suivante :
? Sélectionner la colonne 1
? Rechercher le texte "ZZZZZ"
? tant qu'il est trouvé, sélectionner de la ligne précédente à 2 lignes
après,
? supprimer les lignes sélectionnées (ou bien supprimer sans sélectionner)
EX : le texte est trouvé en ligne 1013, on doit supprimer de 1012 à 1015.

J'ai commencé à le faire à la main, mais c'est beaucoup trop long...

Une bonne âme aura-t-elle pitié d'un ignorant en lui rédigeant la petite
macro ad hoc ?

Merci d'avance à cet éventuel bienfaiteur !

Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !




Avatar
Georges Schell
Merci à JCRSM et à lSteph pour leurs solutions qui fonctionnent toutes les
deux !

Pour JC : l'idée est bonne et je l'utilise souvent ; là, je crois que j'ai
paniqué... En fait, on n'a même pas besoin d'une macro : dans une colonne,
on porte la formule =ligne(), Collage spécial valeur, puis, on fait un tri
sur la 1ère colonne et on supprime les lignes qui sont à 0 au lieu de 1...
Nouveau tri sur les n0s de ligne et ça roule !

La formule de lSteph est, évidemment, élégante !

Merci à tous les deux de votre savoir et de votre solidarité !

Georges

PS pour JC : c'est une sté que vous connaissez...


dans l'article , LSteph à
a écrit le 25/05/05 18:27 :

Bonjour ,

???s'il est aussi en 1012 faudrait ti supprimer 1011
aussi voici
Donc en imaginant qu'il n'y ait pas de "zzzzz" consécutifs à moins de 4
lignes
(un truc qui n'irait pas sinon)
et que l'on accepte Maj ou Min

'****
Sub dzzzzzerbant()
Application.ScreenUpdating = False
Rows(18000).Select
Do While Selection.Row > 1
If UCase(Selection.Cells(1)) Like "*ZZZZZ*" Then
Range(Selection.Offset(-1, 0), _
Selection.Offset(2, 0)).EntireRow.Select
Selection.Rows.Delete
End If
Selection.Offset(-1, 0).Rows(1).Select
Application.StatusBar = "Traitement Ligne :" & Selection.Row
Loop
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

'****
'lSteph

"Georges Schell" a écrit dans le message de news:
BEBA684F.26AE0%
Bonjour tout le monde,

J'ai un très volumineux fichier à traiter pour en extraire des adresses
(18
000 lignes...).
J'ai besoin de faire la chose suivante :
? Sélectionner la colonne 1
? Rechercher le texte "ZZZZZ"
? tant qu'il est trouvé, sélectionner de la ligne précédente à 2 lignes
après,
? supprimer les lignes sélectionnées (ou bien supprimer sans sélectionner)
EX : le texte est trouvé en ligne 1013, on doit supprimer de 1012 à 1015.

J'ai commencé à le faire à la main, mais c'est beaucoup trop long...

Une bonne âme aura-t-elle pitié d'un ignorant en lui rédigeant la petite
macro ad hoc ?

Merci d'avance à cet éventuel bienfaiteur !

Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !







Georges

Note : Pour m¹écrire directement, supprimer un des deux tirets dans mon
adresse !