Macro Excel supprimer une ligne

Macro Excel supprimer une ligne - VB/VBA/VBS - Programmation

Marsh Posté le 03-12-2014 à 16:33:17    

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
Reply

Marsh Posté le 03-12-2014 à 16:33:17   

Reply

Marsh Posté le 03-12-2014 à 16:40:33    

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


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
Reply

Marsh Posté le 03-12-2014 à 19:04:04    

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

Reply

Marsh Posté le 04-12-2014 à 13:04:01    

 
           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 !
  

Reply

Marsh Posté le 05-12-2014 à 10:01:18    

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
Reply

Marsh Posté le 05-12-2014 à 10:09:40    

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
Reply

Marsh Posté le 05-12-2014 à 11:07:34    

 
           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 …
 
 

Reply

Marsh Posté le 05-12-2014 à 11:24:55    

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.

Reply

Marsh Posté le 05-12-2014 à 15:31:52    

 
           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 …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed