Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1067 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Excel supprimer une ligne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro Excel supprimer une ligne

n°2244768
dwarfy
Posté le 03-12-2014 à 16:33:17  profilanswer
 

Bonjour à tous.
 
En préambule, je n'ai *aucune* notion de programmation quelconque ...
 
J'ai réussi à me démerder un peu avec google, mais maintenant je sèche.
 
J'ai une feuille Excel avec dans la ligne D tout un tas de mots. Je veux par exemple supprimer toutes celles qui ne contiennent pas le mot "acr" ou le mot "iot" (et les deux peuvent être dans la cellule, au milieu de tout un tas d'autres mots).
 

Citation :

Sub SupprLigne()
Dim i As Integer
With ThisWorkbook.Sheets("essai" )
            For i = .Range("D" & .Rows.Count).End(xlUp).Row To 2 Step -1
                        If .Range("D" & i).Value <> "iot" And .Range("D" & i).Value <> "acr" Then
                                   .Rows(i).Delete
                        End If
            Next i
End With
End Sub


 
Ce code fonctionne si "acr" ou "iot" sont en début de cellule. Si la cellule contient "tutu pouet acr pop iot", ça ne marche plus forcément.
 
Mes connaissances se limitent à remplacer dans la macro "acr" et "iot" par "*acr*" et "*iot*". Ça marchait bien ça dans mes formules Excel ... Mais pas là !!
 
Si quelqu'un a une petite minute pour m'aider, merci beaucoup !


Message édité par dwarfy le 03-12-2014 à 16:36:26
mood
Publicité
Posté le 03-12-2014 à 16:33:17  profilanswer
 

n°2244770
kiki29
Posté le 03-12-2014 à 16:40:33  profilanswer
 

Salut, il est urgent de consulter : http://dominiquemaniez.developpez. [...] ctionsVBA/


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
n°2244789
dwarfy
Posté le 03-12-2014 à 19:04:04  profilanswer
 

Me voilà avancé. Je vais continuer avec google alors ...

n°2244889
Marc L
Posté le 04-12-2014 à 13:04:01  profilanswer
 

 
           Bonjour, bonjour !
 
           Consulter l'aide VBA concernant la méthode Range.Find, c'est gratuit !
 
           Pour rappel le meilleur ami du débutant n'est pas Google mais l'Enregistreur de macros intégré à Excel :
           en effectuant manuellement un classique Rechercher / Remplacer, le code est livré sur un plateau !
  

n°2245008
dwarfy
Posté le 05-12-2014 à 10:01:18  profilanswer
 

Merci, j'ai essayé avec l'enregistreur de macro mais je n'ai guère eu plus de succès.
 
J'ai réussi à trouver un code qui fonctionne parfaitement:
 

Citation :

Sub DelEditeur3()
Dim r As Long, lr As Long, n As Long, k, i As Long
Application.ScreenUpdating = False
k = Array("iot", "acr" )
lr = Cells(Rows.Count, 4).End(xlUp).Row
For r = lr To 2 Step -1
  n = 0
  For i = LBound(k) To UBound(k)
    If InStr(Cells(r, 4), k(i)) > 0 Then
      n = n + 1
      Exit For
    End If
  Next i
  If n = 0 Then Rows(r).Delete
Next r
Application.ScreenUpdating = True
End Sub


Et je peux y ajouter autant de mots clefs que je veux (iot, acr, d'autres).
 
En faisant des recherches sur tous les termes de ce code (vu que je n'en connais aucun !), j'arrive à le "traduire" et comprendre comment ça marche en plus. Je deviens moins bête ...
 
Mais il marche sur toute les cellules de la ligne, même celle contenant le mot clef. J'aimerais restreindre la recherche du mot clef aux cellules de la colonne D, par exemple. Et ça fera exactement ce que je veux. Pour être plus clair: si j'ai pas le mot clef (ou un des mots clefs) en D4, ça efface toute la ligne 4. Par contre, si j'ai le mot clef en D4, ça efface aussi toute le ligne 4 sauf D4 (puisque le mot clef n'est pas présent en C4 par exemple): je voudrais que ça laisse toute la ligne 4 justement.


Message édité par dwarfy le 05-12-2014 à 10:36:32
n°2245009
dwarfy
Posté le 05-12-2014 à 10:09:40  profilanswer
 

Avec ça en plus, ça a l'air de marcher comme je voulais:
 

Citation :

Option Explicit
Option Base 1
Sub DelEditeur3()
 
Dim cell As Range
Dim Maplage As Range
Set Maplage = Range([AI1], [AI65635].End(xlUp))
 
Dim r As Long, lr As Long, n As Long, k, i As Long
Application.ScreenUpdating = False
 
For Each cell In Maplage
 
k = Array("iot", "acr" )
lr = Cells(Rows.Count, 35).End(xlUp).Row
For r = lr To 2 Step -1
  n = 0
  For i = LBound(k) To UBound(k)
    If InStr(Cells(r, 35), k(i)) > 0 Then
      n = n + 1
      Exit For
    End If
  Next i
  If n = 0 Then Rows(r).Delete
Next r
Next cell
Application.ScreenUpdating = True
End Sub


Ca vous parait cohérent ?
 
Merci.


Message édité par dwarfy le 05-12-2014 à 11:23:35
n°2245014
Marc L
Posté le 05-12-2014 à 11:07:34  profilanswer
 

 
           Si cela fonctionne, cela l'est donc !
 
           S'il y a beaucoup de lignes et peu de correspondances, la méthode Find serait la plus rapide …
 
           J'ai l'impression que la ligne n° … Ah zut le code n'a pas été balisée avec l'icône pourtant dédiée ! (Voir aussi les règles du forum)
           Je ne vois pas trop à quoi sert la plage sur la colonne D vu la plage sur la colonne AI …
 
 

n°2245018
dwarfy
Posté le 05-12-2014 à 11:24:55  profilanswer
 

C'est 35, pas 4 en effet. J'ai édité. J'avais copié/collé un peu vite.
 
L'essentiel c'est que ça marche, comme tu dis.
 
Promis, je tâcherai de ne plus vous déranger (au plus haut point manifestement) avec mes questions (stupides manifestement).
 
Bonne journée.

n°2245068
Marc L
Posté le 05-12-2014 à 15:31:52  profilanswer
 

 
           Avons-nous tenu de tels propos ? Loin de là ‼
           Si cela avait été le cas, pourquoi aurais-je alors évoqué le décalage de plages de cellules ? …
 
           Que ce soit le lien vers un tutoriel comme l'astuce du Générateur de macros pour un tel cas - simple - restent valables.
           La consultation des règles du forum stipule bien que ce n'est donc pas un lieu où l'on passe commande,
           son but étant de répondre à des points techniques (de programmation) précis …
 
           Et la qualité d'une réponse étant intrinsèquement liée à celle de la question posée,
           relire le sujet initial juste pour s'apercevoir de la légèreté de la problématique exposée, loin d'être exhaustive !
           Déjà il y a eu des réponses, souvent quand la demande n'est pas claire ou incomplète, il n'y en a aucune …
 
           Ne pas oublier les intervenants étant bénévoles, officiant donc sur leur temps libre,
           il n'y a donc aucune contrainte de réponse ni de durée …
 
           A bon entendeur, la bonne fin de journée …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro Excel supprimer une ligne

 

Sujets relatifs
Gestion de Base de données partagées Excelwrapping en une ligne
probleme avec la fin de la ligneSuppression ligne en fonction du format d'une cellule
[resolu] retour à la ligne et ajax/CKEditorMacro VBA Powerpoint - Suppression de plusieurs slides
Insérer une ligne en dessous d'un contenu précisInstaller un formulaire en ligne sans connaissance
HELP please : supprimer ligne excel si cellule = 2, 3,4 ou 5Macro excel supprimer une ligne sous conditions
Plus de sujets relatifs à : Macro Excel supprimer une ligne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR