Problème pour supprimer des lignes dans Excel
Fermé
mouchadawa
Messages postés
2
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
25 novembre 2010
-
25 nov. 2010 à 14:03
Utilisateur anonyme - 26 nov. 2010 à 15:49
Utilisateur anonyme - 26 nov. 2010 à 15:49
A voir également:
- Problème pour supprimer des lignes dans Excel
- Aller à la ligne excel - Guide
- Supprimer liste déroulante excel - Guide
- Comment supprimer une page dans word - Guide
- Supprimer compte instagram - Guide
- Formule excel pour additionner plusieurs cellules - Guide
6 réponses
daniel-Henri
Messages postés
11
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
25 novembre 2010
25 nov. 2010 à 15:32
25 nov. 2010 à 15:32
J'ai eu à faire à ce type de problème. Sélectionner une catégorie de personnes pour "agir". Mon procédé est de trier le fichier sur le critère approprié (après avoir fait une copie dans une autre feuille par sécurité). Puis éliminer les personnes ne répondant pas aux critères. Ainsi on peut traiter les personnes concernées.
J'espère que cette solution t'apportera un +.
J'espère que cette solution t'apportera un +.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
25 nov. 2010 à 16:26
25 nov. 2010 à 16:26
Bonjour,
Et en récompense, o, aura un voyage gratuit ? lol
la macro parcourt la colonne c et te demande si on supprime la destination. si oui
toutes les lignes comportant le mot sont supprimer. par ex:Grèce supprimée ==> Delos, Grèce supprimée; Grèce,delphes supprimé
Et en récompense, o, aura un voyage gratuit ? lol
Sub virer_clients() cptr = 2 Do Until IsEmpty(Cells(cptr, 3)) ref = Cells(cptr, 3) choix = MsgBox(" destination: " & ref & " à supprimer ?", vbYesNo) If choix = vbYes Then nbre = Application.CountIf(Range("C2:C100"), "*" & ref & "*") lig = 1 For cptr2 = 1 To nbre lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row Rows(lig).Delete Next End If cptr = cptr + 1 Loop End Sub
la macro parcourt la colonne c et te demande si on supprime la destination. si oui
toutes les lignes comportant le mot sont supprimer. par ex:Grèce supprimée ==> Delos, Grèce supprimée; Grèce,delphes supprimé
mouchadawa
Messages postés
2
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
25 novembre 2010
25 nov. 2010 à 19:21
25 nov. 2010 à 19:21
Bonjour Michel, bonjour à tous,
Merci mille fois d'avoir répondu à ma question :)
Je voudrais bien lancer la procédure, mais sur un fichier de 2000 lignes clients duquel je veux enlever ceux qui ont fait leur dernier voyage en Grèce, en Espagne et en Allemagne par exemple, j'aurai un code du type :
Sub virer_clients()
cptr = 2
Do Until IsEmpty(Cells(cptr, 3))
ref = Cells(cptr, 3)
choix = MsgBox(" GRECE: "+ "ESPAGNE:"+ "ALLEMAGNE:" & ref & " à supprimer ?", vbYesNo)
If choix = vbYes Then
nbre = Application.CountIf(Range("C1:C2000"), "*" & ref & "*")
lig = 1
For cptr2 = 1 To nbre
lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row
Rows(lig).Delete
Next
End If
cptr = cptr + 1
Loop
End Sub
Je ne suis pas trop sûr du " GRECE: "+ "ESPAGNE:"+ "ALLEMAGNE:" ;-))))
Pouvez-vous me dire où je dois mettre ces villes dans le code? Je suis vraiment désolé, je n'y connais rien en VBA, mais à ce qui parait quelques lignes de codes peuvent me changer la vie...
Merci d'avance, c'est vraiment top qu'il y ait des gens comme vous sur le site!!!! =)
Merci mille fois d'avoir répondu à ma question :)
Je voudrais bien lancer la procédure, mais sur un fichier de 2000 lignes clients duquel je veux enlever ceux qui ont fait leur dernier voyage en Grèce, en Espagne et en Allemagne par exemple, j'aurai un code du type :
Sub virer_clients()
cptr = 2
Do Until IsEmpty(Cells(cptr, 3))
ref = Cells(cptr, 3)
choix = MsgBox(" GRECE: "+ "ESPAGNE:"+ "ALLEMAGNE:" & ref & " à supprimer ?", vbYesNo)
If choix = vbYes Then
nbre = Application.CountIf(Range("C1:C2000"), "*" & ref & "*")
lig = 1
For cptr2 = 1 To nbre
lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row
Rows(lig).Delete
Next
End If
cptr = cptr + 1
Loop
End Sub
Je ne suis pas trop sûr du " GRECE: "+ "ESPAGNE:"+ "ALLEMAGNE:" ;-))))
Pouvez-vous me dire où je dois mettre ces villes dans le code? Je suis vraiment désolé, je n'y connais rien en VBA, mais à ce qui parait quelques lignes de codes peuvent me changer la vie...
Merci d'avance, c'est vraiment top qu'il y ait des gens comme vous sur le site!!!! =)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
26 nov. 2010 à 09:53
26 nov. 2010 à 09:53
Bonjour,
En Excel, On ne réagit pas pareil entre 100 lignes et 2000 lignes !!! :-)
c'est possible avec dans le msgbox on écrit GRECE+ESPAGNE+ALLEMAGNE:"
tu dis si tu veux que je propose autre chose car il y a d'autres propositions qui ont été formulées...
dans l'attente
cordialement
En Excel, On ne réagit pas pareil entre 100 lignes et 2000 lignes !!! :-)
c'est possible avec dans le msgbox on écrit GRECE+ESPAGNE+ALLEMAGNE:"
tu dis si tu veux que je propose autre chose car il y a d'autres propositions qui ont été formulées...
dans l'attente
cordialement
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
26 nov. 2010 à 14:01
26 nov. 2010 à 14:01
Apparemment, les propositions de mes petits camarades ne fonctionnent qu'avec une seule destnation
donc
donc
Sub supprimer_destination() Dim derlig As Integer, choix As String Dim separ, cptr0 As Byte, ref As String Dim nbre As Integer, lig As Integer, cptr1 As Integer, lignes As String derlig = Cells(Cells.Rows.Count, 3).End(xlUp).Row choix = InputBox("Indiquer les pays à supprimer séparés par un signe+" _ & vbLf & "en tenant compte des orthographes utilisées." _ & vbLf & vbTab & "par ex: Grèce+Grece+GRECE+Suisse") If choix = "" Then Exit Sub separ = Split(choix, "+") Application.ScreenUpdating = False For cptr0 = 0 To UBound(separ) ref = separ(cptr0) nbre = Application.CountIf(Range("C2:C" & derlig), "*" & ref & "*") lig = 1 For cptr = 1 To nbre lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row Rows(lig).Delete Next Next End Sub
tchernosplif
Messages postés
600
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
21 juin 2015
245
25 nov. 2010 à 16:40
25 nov. 2010 à 16:40
voila une approche différente avec la formule cherche.
https://forums.commentcamarche.net/forum/affich-19945907-excel-fonction-recherchev
il ne resterait plus qu'à filtrer la liste.
https://forums.commentcamarche.net/forum/affich-19945907-excel-fonction-recherchev
il ne resterait plus qu'à filtrer la liste.
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 421
25 nov. 2010 à 19:56
25 nov. 2010 à 19:56
Bonsoir
Autre solution,sans VBA et sans filtrer:
dans votre liste compléte qui commence pour l'exemple sur ligne 2 (ligne 1 interdite)
Pour l'exemple à adapter
en feuille 1 votre liste débute en ligne 2 de A2 à F2000
nommer ce champ : Ex CHAMP
En Y1 hors champ entrez le texte cherché
une colonne hors champ, mettons Z pour l'exemple, sur cette Feuil1!:
=SI(NB.SI(Cellule destination;"*"&Y1&"*")=1;MAX($Z$1:Z1)+1;0)
tirez cette formule sur la hauteur du champ, (attention un Z1 est bloqué avec $$ pas l Nommez ce champ Z2:Z2000: CODE'autre
Edition sur Feuil2
Sur la première cellule en haut à gauche du tableau
=SI(LIGNE(A1)>MAX(CODE);"";INDEX(CHAMP;EQUIV(LIGNE(A1);CODE;0);COLONNE(A$1))
En B1
=SI($A1="";""SI(LIGNE($A1)>MAX(CODE);"";INDEX(CHAMP;EQUIV(LIGNE($A1);CODE;0);COLONNE(B$1))
mettez les blocages $ aux bons endroit
Tirez cette formule sur la largeur nécessaire(F dans l'exemple et sur la hauteur voulue.
Vous aurez dans ce tableau la liste des clients dont une destination correspond au texte entré en Y1
Crdlmnt
Autre solution,sans VBA et sans filtrer:
dans votre liste compléte qui commence pour l'exemple sur ligne 2 (ligne 1 interdite)
Pour l'exemple à adapter
en feuille 1 votre liste débute en ligne 2 de A2 à F2000
nommer ce champ : Ex CHAMP
En Y1 hors champ entrez le texte cherché
une colonne hors champ, mettons Z pour l'exemple, sur cette Feuil1!:
=SI(NB.SI(Cellule destination;"*"&Y1&"*")=1;MAX($Z$1:Z1)+1;0)
tirez cette formule sur la hauteur du champ, (attention un Z1 est bloqué avec $$ pas l Nommez ce champ Z2:Z2000: CODE'autre
Edition sur Feuil2
Sur la première cellule en haut à gauche du tableau
=SI(LIGNE(A1)>MAX(CODE);"";INDEX(CHAMP;EQUIV(LIGNE(A1);CODE;0);COLONNE(A$1))
En B1
=SI($A1="";""SI(LIGNE($A1)>MAX(CODE);"";INDEX(CHAMP;EQUIV(LIGNE($A1);CODE;0);COLONNE(B$1))
mettez les blocages $ aux bons endroit
Tirez cette formule sur la largeur nécessaire(F dans l'exemple et sur la hauteur voulue.
Vous aurez dans ce tableau la liste des clients dont une destination correspond au texte entré en Y1
Crdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
26 nov. 2010 à 15:35
26 nov. 2010 à 15:35
Bonjour,
Je prends le sujet en cours. J'ai regardé ce qu'avait fait michel_m et je me suis permis en partant de sa structure de modifier son programme.
Je suis parti de l'hypothèse qu'il fallait une feuille supplémentaire dans le fichier Excel dans laquelle on trouverait une colonne A avec les noms des pays et dans la colonne B mettre seulement une croix devant les pays qu'on veut conserver.
ex
A------------------------ B
Allemagne
Autriche
Italie
Chine------------------- x
Japon------------------- x
Honduras
Argentine
etc.
Cette feuille supplémentaire doit avoir comme nom d'onglet Pays.
De cette manière, il n'y a plus besoin de répondre Ok à une Msgbox. La macro traite automatiquement toutes les lignes.
Sub virer_clients()
cptr = 1
Do Until IsEmpty(Sheets("Pays").Cells(cptr, 1))
Aeffacer = Sheets("Pays").Cells(cptr, 2)
If Sheets("Pays").Cells(cptr, 2) = "X" Or Sheets("Pays").Cells(cptr, 2) = "x" Then
ref = Sheets("Pays").Cells(cptr, 1)
Sheets(1).Select 'Les lignes à enlever sont dans la feuille 1
nbre = Application.CountIf(Range("C2:C100"), "*" & ref & "*")
lig = 1
For cptr2 = 1 To nbre
lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row
Rows(lig).Delete
Next
End If
cptr = cptr + 1
Loop
End Sub
Cordialement Agi67.fr
Je prends le sujet en cours. J'ai regardé ce qu'avait fait michel_m et je me suis permis en partant de sa structure de modifier son programme.
Je suis parti de l'hypothèse qu'il fallait une feuille supplémentaire dans le fichier Excel dans laquelle on trouverait une colonne A avec les noms des pays et dans la colonne B mettre seulement une croix devant les pays qu'on veut conserver.
ex
A------------------------ B
Allemagne
Autriche
Italie
Chine------------------- x
Japon------------------- x
Honduras
Argentine
etc.
Cette feuille supplémentaire doit avoir comme nom d'onglet Pays.
De cette manière, il n'y a plus besoin de répondre Ok à une Msgbox. La macro traite automatiquement toutes les lignes.
Sub virer_clients()
cptr = 1
Do Until IsEmpty(Sheets("Pays").Cells(cptr, 1))
Aeffacer = Sheets("Pays").Cells(cptr, 2)
If Sheets("Pays").Cells(cptr, 2) = "X" Or Sheets("Pays").Cells(cptr, 2) = "x" Then
ref = Sheets("Pays").Cells(cptr, 1)
Sheets(1).Select 'Les lignes à enlever sont dans la feuille 1
nbre = Application.CountIf(Range("C2:C100"), "*" & ref & "*")
lig = 1
For cptr2 = 1 To nbre
lig = Columns(3).Find(ref, Cells(lig, 3), xlValues, xlPart).Row
Rows(lig).Delete
Next
End If
cptr = cptr + 1
Loop
End Sub
Cordialement Agi67.fr
Utilisateur anonyme
26 nov. 2010 à 15:49
26 nov. 2010 à 15:49
Toutes mes excuses pour la réponse que je viens d'apporter. Dans mon explication sur les croix, c'est le contraire qui se passe. Tous les pays avec une croix sont enlevés de la liste.