- 1 – considérons ici la liste (A1 :E27), je souhaite supprimer toutes les lignes pour lesquels l’éditeur est égal à Microsoft
Sub DelEditeur()
Dim i As Integer
With ThisWorkbook.Sheets("Feuil1")
'Précisez le nom de votre feuille
For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne c
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("C" & i).Value = "Microsoft" Then
.Rows(i).Delete
End If
Next i
End With
End Sub
Dim i As Integer
With ThisWorkbook.Sheets("Feuil1")
'Précisez le nom de votre feuille
For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne c
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("C" & i).Value = "Microsoft" Then
.Rows(i).Delete
End If
Next i
End With
End Sub
- 3 – Et voici le résultat après exécution de la procédure DelEditeur()…
Sub DelEditeur2()
Dim i As Integer
Dim Editeur As String
Editeur = InputBox("Veuillez entrer l'editeur à supprimer ?", "Welcome", "Microsoft")
'la valeur saisie est transmise à la variable Editeur
With ThisWorkbook.Sheets("Feuil1")
For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("C" & i).Value = Editeur Then
Rows(i).Delete
End If
Next i
End With
End SubDim i As Integer
Dim Editeur As String
Editeur = InputBox("Veuillez entrer l'editeur à supprimer ?", "Welcome", "Microsoft")
'la valeur saisie est transmise à la variable Editeur
With ThisWorkbook.Sheets("Feuil1")
For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("C" & i).Value = Editeur Then
Rows(i).Delete
End If
Next i
End With
45 commentaires:
Bonjour !
Merci pour la macro.
J'ai une question à vous poser (si vous avez le temps de répondre) : est-ce qu'il est possible de lancer une recherche sur une occurrence à l'intérieur de la valeur contenue dans la cellule. Par exemple, j'ai des cellules qui contiennent des adresses URL et je veux supprimer toutes celles qui renvoient au site de Microsoft.
Merci pour votre éventuelle réponse ;-)
Bonjour,
Super cette Macro.
Mais j'aurais besoins d'un truc plus large. je voudrais supprimer des lignes qui contiennes des Nombres différant? Exemple ligne A1 à A1000,des nombres qui vont de 3200210 a 3510045 par exemple avec des case vide au milieu que je voudrais supprimer aussi. et que je veux seulement les ligne qui vont de 340092 à 360012.
si vous pouvez m’aidè ce serais génial.
Merci d'avance
Je voudrais supprimer des lignes si valeur = 0 Mais, lorsqu'on supprimer une ligne, celle d'en dessous remonte à l'adresse de celle que tu viens de supprimer.et le cellule m'affiche REF# car Les codes proposés ne me permettent pas de résoudre mon problème
Donc si la cellule affiche #REF elle ne contient pas 0 mais une formule de calcul dont le résultat est 0 cela n'est pas du tout la même chose !!!
Bonjour
Je voudrais faire une variante de cette macro, celle ci demande une variable pour supprimer les lignes qui la contiennent
Je voudrais faire le contraire, ne garder que les lignes de la variable que l'on va fournir
Est ce possible?
Merci d'avance
Bonjour
avez vous essayer simplement
If .Range("C" & i).Value <> Editeur Then
(<> différent de)
Bonsoir
Oui çà fonctionne! c'était tout bête,merci beaucoup
J'ai juste un petit problème, j'ai créé la macro dans le classeur de macro personnel (personal.xlsb)
on dirait que la commande With ThisWorkbook.Sheets("Feuil1") n'est pas adaptée
si je crée la macro dans le fichier concerné c'est bon mais je voudrais que la macro soit accessible pour n'importe quel fichier excel
faut il formuler différent cette ligne?
Bonjour
Si vous êtes dans personal.xlsb alors ThisWorkbook désigne le classeur personnal.
Avant le With tenter de désigner votre classeur de travail qui bien sur sera ouvert préalablement, un truc du style
Workbooks("Monclasseur.xlsx").Activate
Bon courage
Bonjour,
Déjà merci de partager votre savoir.
Je voudrais supprimer la ligne sauf la colonne A qui doit rester intact. Comment faire ?
Bonjour
Donc il s'agit, si je comprend bien d'effacer les cellules de la ligne i et non plus de supprimer
cette ligne.
On pourrait envisager de remplacer .Rows(i).delete par .Range("B"&i&":E"&i).clear
Je vous laisse faire le test
Merci
Bonjour,
Pouvez-vous en dire plus sur l'expression " For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1 ", c'est à dire la signification littérale exacte de cette expression ?
La fin : "To 2 Step -1" permet-elle de remonter d'un cran vers le haut après suppression d'une ligne ? Je dis ceci car lors de la suppression d'une ligne, celle du dessous remonte et devient celle du dessus (ex : après suppression d'une ligne 20, la 21 devient la 20, au risque donc d’omettre la suppression de cette nouvelle ligne 20).
Merci à vous pour ce bout de code en tout cas.
Cdlt
Bonjour
Une boucle pour se lit :
Pour VAR variant d'un MIN à un MAX (avec un pas de y) faire
Action(s)
Fin de Pour
Donc ici nous avons une boucle de type :
Pour VAR variant d'un MAX à un MIN (avec un pas de - y) faire
Action(s)
Fin de Pour
i est la variable (compteur)
MAX est le nombre de ligne de la liste donnée par la méthode Count de l'objet
Range.rows (rows, la collection des lignes de la sélection Range). Pour cela nous nous sommes déplacé sur la dernière ligne de la liste (End(xlUp) "CTRL bas).
Le Pas est -1 puisque nous allons faire la boucle du bas vers le haut en remontant.
MIN est la ligne 2; là on arrête la boucle Pour
Le fait de remonter n'est pas un problème puisqu'on ne parcours en réalité la liste qu'une seule fois.
J'espère avoir été clair
Bonjour, si dans ma cellule il y a microsoft mais pas que. S'il y a d'autres mots, comment puis-je quand même supprimer la ligne si la cellule contient microsoft ? Je suis une tarte, désolé :-)
Merci pour votre partage très utile
Bonjour Jean-Claude
Il a été répondu à cette question sur le 2éme article consacré à ce sujet,
https://olivier-bureautique.blogspot.fr/2009/06/excel-2007-vba-supprimer-des-lignes-en.html
Bon courage
Bonjour,
Je suis une novice dans le domaine.
En utilisant cette macro j'ai le message d'erreur suivant : "Dépassement de capacité".
Je ne sais ce qu'il faut faire pour augmenter la capacité. Je travaille sur une base de donnée qui peut atteindre 400000 lignes d'écritures.
Il y a t-il une solution?
Bonjour
la macro repose ici sur la variable i de type Integer (2 octets) donc -32 765 à + 32 767 Max.
Il faut donc déclarer la variable i en long (4 octets)
dim i as Long
si cela est insuffisant alors on passe en nombre réel (type Single)
Bon courage
Bonjour,
J'ai un soucis quand j'applique votre code, le débogueur me dit: dépassement de capacité.
Donc je suppose que le nombre de ligne que j'utilise est trop grand. Après avoir cherché un peu, je suis censé convertir la "valeur trop grande" retournée avec un CLONG... mais je suis un peu perdu...
Bien cordialement,
Loïc
Avez vous essayer de modifier le type de variable comme indiqué dans mon post précédent ??
Bonjour Monsieur Picot,
Je cherche à faire une macro qui supprime la ligne si la cellule contient le signe moins "-".
Cependant, mon problème vient du fait que les cellules en questions contiennent des chiffres suivis ou précédé du signe "-".
Exemple : 310.705-
Comment puis-je procéder pour exécuter correctement mon code?
Merci d'avance et bonne journée,
Alexandre
Bonjour !
Merci beaucoup je débute et ça dépanne vraiment bien,
Possible de rajouter une condition ? J'ai beau rajouté un :
For i = .Range("Z" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("Z" & i).Value = "OK" AND Range("BE" & i).Value = "OK" Then
.Rows(i).Delete
Mais ça ne fonctionne pas vraiment...
De plus dans votre exemple pour supprimer les lignes avec Microsoft, pas de possibilité de faire une recherche de valeur "contenant le texte" ?
If .Range("C" & i).Value = "*Microsoft*" ne fonctinone pas non plus..
Merci d'avance !
bonjour Alexandre
En réponse au post du 5/08 encore une fois regardez cet article "http://olivier-bureautique.blogspot.fr/2009/06/excel-2007-vba-supprimer-des-lignes-en.html" il devrait vous inspirer la réponse...
Merci
Pour le mail du 11/08 la réponse est la même "http://olivier-bureautique.blogspot.fr/2009/06/excel-2007-vba-supprimer-des-lignes-en.html"
Merci
bonjour,serait il possible de supprimer aussi ces lignes au niveau d'un autre classeur fermé? merci d'avance
Bonjour
si un classeur est fermé, ce n'est pas un classeur mais un fichier (autre objet),
il faudra donc d'abord l'ouvrir pour pouvoir le nettoyer ; bien sur cela est facilement faisable,
demandez l'ouverture du classeur puis vous positionner dessus.
Merci
Bonjour,
Pourriez vous me donner un exemple de code svp
merci
Quelque chose comme cela ?
Sub DelEditeur2()
Dim i As Integer
Dim Editeur As String
'il suffit d'ouvrir le fichier
Workbooks.Open Filename:="C:\dossier\sous dossier\...\monfichier.xlsx"
'on se positionne
Range("A1").Select
Editeur = InputBox("Veuillez entrer l'editeur à supprimer ?", "Welcome", "Microsoft")
'la valeur saisie est transmise à la variable Editeur
With ThisWorkbook.Sheets("Feuil1")
For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("C" & i).Value = Editeur Then
Rows(i).Delete
End If
Next i
End With
'on referme éventuellement le fichier
ActiveWorkbook.Close
End Sub
Bonjour à tous
Dans votre code initial vous travaillez sur la colonne C
Je voudrais savoir quel serait le code à employer pour travailler sur la dernière colonne non vide ?
J'ai essayé :
Dim cellule5
cellule5 = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
With ThisWorkbook.Sheets("ANNEES")
'Précisez le nom de votre feuille
For k = .Range(cellule5 & .Rows.Count).End(xlUp).Row To 2 Step -1
'je voudrais travailler sur la dernière colonne non vide
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range(cellule5 & k).Value = "A SUPPRIMER" Then
Rows(k).Delete
End If
Next k
End With
mais j'ai un message d'erreur :"erreur définie par l'application ou par l'objet"
Pourriez vous m'aider ?
Je précise que j'ai excel 2013
Bonne journée
Daniel
Bonjour à tous
Dans votre code initial vous travaillez sur la colonne C
Je voudrais savoir quel serait le code à employer pour travailler sur la dernière colonne non vide ?
J'ai essayé :
Dim cellule5
cellule5 = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
With ThisWorkbook.Sheets("ANNEES")
'Précisez le nom de votre feuille
For k = .Range(cellule5 & .Rows.Count).End(xlUp).Row To 2 Step -1
'je voudrais travailler sur la dernière colonne non vide
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range(cellule5 & k).Value = "A SUPPRIMER" Then
Rows(k).Delete
End If
Next k
End With
mais j'ai un message d'erreur :"erreur définie par l'application ou par l'objet"
Pourriez vous m'aider ?
Je précise que j'ai excel 2013
Bonne journée
Bonjour
Le problème vient de ta cellule 5 qui contient un nombre et pas un texte !
Ainsi ta colonne "D" contient 4 pas "D"
Il faut donc convertir le nombre en texte pour ma part j'utilise une fonction du genre :
Public Function Lettre_Colonne(colonne As Long) As String
Lettre_Colonne = Split(Sheets(1).Cells(1, colonne).Address, "$")(1)
End Function
que je place sur une feuille de module à pat, après ton code peut être du type :
Sub test()
Dim k As Long
Dim cellule5 As Long
Dim maCol As String
cellule5 = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
maCol = Lettre_Colonne(cellule5)
With ThisWorkbook.Sheets("Feuil1") 'Précisez le nom de votre feuille
For k = .Range(maCol & .Rows.Count).End(xlUp).Row To 2 Step -1
'je voudrais travailler sur la dernière colonne non vide
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range(maCol & k).Value = "a" Then
Rows(k).Delete
End If
Transformer la référence Colonne A=1 est un grand classique en VBA,
Bon courage
Olivier
Bonjour encore merci pour toutes ces précisions.
Pourriez-vous nous indiquer comment supprimer une ligne dont la valeur de la cellule serait contenue dans un autre classeur ou onglet (via sorte de rechercheV intégrée à la macro) ?
Jérémy
Bonjour encore merci pour toutes ces précisions.
Pourriez-vous nous indiquer comment supprimer une ligne dont la valeur de la cellule serait contenue dans un autre classeur ou onglet (via sorte de rechercheV intégrée à la macro) ?
Jérémy
Bonjour encore merci pour toutes ces précisions.
Pourriez-vous nous indiquer comment supprimer une ligne dont la valeur de la cellule serait contenue dans un autre classeur ou onglet (via sorte de rechercheV intégrée à la macro) ?
Jérémy
Bonjour,
La fonction recherchev() existe en vba : vlookup()
peut être tu peux mettre le résultat de ton vlookup dans une variable.
pour l'instant ta demande manque de précision, mais un vlookup peut très bien faire référence à une table d'un autre classeur.
Merci
Olivier
Bonjour
Comment demander a ce que la formule s'execute sde la ligne 10 à 30 et de la ligne 40 à 50 par exemple ?
et non pas sur toute la colonne ?
Merci d'avance
Merci pour ce bout de code qui viens à point nommé apportez une nette amélioration dans mes applications VBA Excel.
Petite question: Comment adapter ce code pour que au lieu de supprimer la référence correspondante à la valeur saisie renvoi plutôt
le résultat du nombre d’occurrence pour cette référence dans la plage.
Merci.
Merci pour ce bout de code qui viens à point nommé apporter une nette amélioration dans mes applications VBA Excel.
Petite question: Comment adapter ce code pour que au lieu de supprimer les références correspondantes à la valeur saisie renvoi plutôt
le résultat du nombre d’occurrence pour cette référence dans la plage ?
Merci.
Bonsoir,
Avant tout, merci pour les informations que tu apportes.
Je me demandai comment faire pour que cette macro s'applique sur plusieurs feuilles, en même temps.
Merci.
Bonjour,
ma question serait de savoir comment mettre plusieurs valeurs dans la condition.
C'est-à-dire au lieu de microsoft seulement, si on voulait aussi ajouter opera, mozilla.... bref inscrire autant de variables que voulues comment se présenterait la condition: For i = .Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("C" & i).Value = Editeur Then
Rows(i).Delete
merci d'avance
Bonjour
genial la macro mais comment faire si on veut pas supprimer l’éditeur égal à Microsoft mais compter le nombre de fois quon a microsoft
merci de vos reponse
Bonjour,
Est-il possible de mettre une plage de cellule ou une colonne (qui contient une liste de valeurs) comme critère ?
C'est à dire qu'à la place de "Microsoft" on aurait une sorte de Range("B2:B20")
Merci
Bonjour,
Est-il possible de mettre une plage de cellule ou une colonne (qui contient une liste de valeurs) comme critère ?
C'est à dire qu'à la place de "Microsoft" on aurait une sorte de Range("B2:B20")
Merci
Bonjour,
Je dispose d'un onglet "VERIF" où dedans je mets les valeurs (dans une colonne) pour lesquelles il faut supprimer les lignes.
[code]
Sub DelEditeur()
Dim i As Integer
Dim zListeSkuErreur As String
'zListeSkuErreur = Sheets("VERIF").Range("B4:B40").Select
'zListeSkuErreur = Sheets("VERIF").Range("B4:B40").Value
Set zListeSkuErreur = Sheets("VERIF").Range("B4:B40")
With ThisWorkbook.Sheets("PRODUITS")
'Précisez le nom de votre feuille
For i = .Range("B" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne c
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("B" & i).Value = zListeSkuErreur Then
.Rows(i).Delete
End If
Next i
End With
End Sub
[/code]
Mais VBA me dit objet requis
Merci pour votre aide
Bonjour,
Je suis entrain d'automatiser les tableaux de bord, mais quelqu'un peut me donner des astuces pour créer une macro qui me fait un filtre automatique sur des critères bien defini?
Merci
Bonjour,
Très bien expliqué!
Dans votre exemple, est-il possible de mettre un onglet déroulant avec l'ensemble des valeurs de la colonne C et de cocher celle qu'il faut supprimer?
D'avance Merci
BONJOUR,
ça me donne un code d'erreur '6' dépassement de capacité sachant que mon fichier compte plusieurs ligne
Enregistrer un commentaire