Problème pour supprimer des lignes dans Excel
mouchadawa
Messages postés
2
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je travaille dans une agence de voyage, et j'ai un fichier excel qui sert de base de données clients à traiter.
Dans ce fichier, chaque client a une ligne, avec une cellule pour son nom, son prénom, son adresse, etc., et une pour leur dernière destination. Le problème de cette dernière cellule, c'est qu'elle est souvent mal remplie (parfois on a la ville, parfois le pays, parfois les deux, etc.) Toutes les destinations sont dans une seule et même colonne, la colonne C.
exemple :
- Grèce
- Mykonos, Grèce
- Chine, Shangai
- Alger
- ...
Mon problème est que je dois envoyer une offre promotionnelle à toutes les personnes qui ont fait leur dernier voyage en Asie. Par conséquent, il faut que je retire de mon fichier tous ceux qui sont partis en Europe, en Afrique, etc.
Aussi, est ce que quelqu'un aurait la gentillesse de m'aider à faire un programme VBA du style (imaginons qu'on ait un tableau de 100 clients, donc 100 lignes) :
Ci = cellule Ci
Li = ligne i
i = integer
For i=1 to 100 do
If (inside Ci on a le mot "Grèce" ou "Alger" ou "Mykonos" ou "...") then delete Li
Comme ca, ca supprime les lignes qui comportent les destinations qui ne m'intéressent pas ! Et j'ai un fichier "nettoyé" avec juste les lignes des prospects que je vise :)
J'espère que mon explication est assez claire, et merci par avance pour votre aide !! :) :) :)
Je travaille dans une agence de voyage, et j'ai un fichier excel qui sert de base de données clients à traiter.
Dans ce fichier, chaque client a une ligne, avec une cellule pour son nom, son prénom, son adresse, etc., et une pour leur dernière destination. Le problème de cette dernière cellule, c'est qu'elle est souvent mal remplie (parfois on a la ville, parfois le pays, parfois les deux, etc.) Toutes les destinations sont dans une seule et même colonne, la colonne C.
exemple :
- Grèce
- Mykonos, Grèce
- Chine, Shangai
- Alger
- ...
Mon problème est que je dois envoyer une offre promotionnelle à toutes les personnes qui ont fait leur dernier voyage en Asie. Par conséquent, il faut que je retire de mon fichier tous ceux qui sont partis en Europe, en Afrique, etc.
Aussi, est ce que quelqu'un aurait la gentillesse de m'aider à faire un programme VBA du style (imaginons qu'on ait un tableau de 100 clients, donc 100 lignes) :
Ci = cellule Ci
Li = ligne i
i = integer
For i=1 to 100 do
If (inside Ci on a le mot "Grèce" ou "Alger" ou "Mykonos" ou "...") then delete Li
Comme ca, ca supprime les lignes qui comportent les destinations qui ne m'intéressent pas ! Et j'ai un fichier "nettoyé" avec juste les lignes des prospects que je vise :)
J'espère que mon explication est assez claire, et merci par avance pour votre aide !! :) :) :)
A voir également:
- Problème pour supprimer des lignes dans Excel
- Supprimer rond bleu whatsapp - Guide
- Liste déroulante excel - Guide
- Supprimer une page dans word - Guide
- Word et excel gratuit - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
6 réponses
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 +.
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é
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!!!! =)
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
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.
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
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