Microsoft 365 Effacer dans colonne "G" les cellules qui ne contiennent pas un mot

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous 🙂

Je bute sur un souci de codification (évidemment lol 🙂)
Je voudrais comme indiqué dans le titre du fil "Effacer dans colonne "G" les cellules qui ne contiennent pas un mot" dans l'exemple le mot "Date".

J'ai tenté, testé et recherché... j'ai trouvé un code sur un site que j'ai tenté d'adapter sans y arriver :

VB:
Sub NETTOYAGE()
Dim plage As Range
Dim i As Long
Dim vval As String
'Plage de recherche ici G2 à Derniere cellule utilisée de colonne G
Set plage = Range("g2" & ":g" & Range("g65000").End(xlUp).Row) 'Range("g:g")

'Pour chaque cellule de la plage de recherche
For i = plage.Rows.Count To 1 Step -1
    'je met dans une variable les 3 premiers caractères de la cellule
    'vval = Left(plage.Cells(i, 7).Value, 4)
    'Si vval = total alors j'efface la ligne entiere
    ' on utilise StrComp avec vbTextCompare pour ne pas tenir compte de la case (minuscules/majuscules)
    If StrComp(vval, "Date", vbTextCompare) <> 0 Then
        plage.Cells(i, 7).ClearContents
    End If
Next i
End Sub

Dans mon exemple (fichier joint), je voudrais qu'il m'efface tous les "ff" et garde les "Date"
Lol : ça n'efface rien du tout (nada, queue d'ail...)

Vous voudriez bien me corriger ?

Un grand merci par avance.
Fichier joint et je continue mes recherches...
lionel 🙂
 

Pièces jointes

Dernière édition:
Solution
Bonjour Lionel,
Comme d'hab, pas tout compris.
Essai : si en G on trouve autre chose que "Date", on efface. Voir PJ.
Code:
Sub NETTOYAGE()
Dim plage As Range, i As Long
Application.ScreenUpdating = False
Set plage = Range("g2" & ":g" & Range("g65000").End(xlUp).Row) 'Range("g:g")
For i = plage.Rows.Count To 1 Step -1
    If Left(Cells(i, "G"), 4) <> "Date" Then Cells(i, "G") = ""
Next i
End Sub
Bonjour Lionel,
Comme d'hab, pas tout compris.
Essai : si en G on trouve autre chose que "Date", on efface. Voir PJ.
Code:
Sub NETTOYAGE()
Dim plage As Range, i As Long
Application.ScreenUpdating = False
Set plage = Range("g2" & ":g" & Range("g65000").End(xlUp).Row) 'Range("g:g")
For i = plage.Rows.Count To 1 Step -1
    If Left(Cells(i, "G"), 4) <> "Date" Then Cells(i, "G") = ""
Next i
End Sub
 

Pièces jointes

Bonjour Lionel, sylvanu,

Pour le fun une solution sans boucle :
VB:
Sub NETTOYAGE()
Application.ScreenUpdating = False
[G:G].Replace "Date", "#N/A", xlWhole
On Error Resume Next 'si aucune SpecialCell
With [G:G].SpecialCells(xlCellTypeConstants, 16)
    [G:G] = ""
    .Value = "Date"
End With
End Sub
A+
 
Bonjour à tous

depuis le temps, faudrait peut etre penser à user du mode débug...
tu verrais que ta variable vval n'est jamais initialisée.. elle reste vide, vu que tu as commenté la ligne
ensuite;. quand tu définis "Plage" sur UNE colonne et plusieurs lignes..
eh bah.. Plage.cells(i,7)==> 7eme colonne d'une plage qui n'en contient qu'une;. forcément.. ca n'efface pas grand chose;.

VB:
Sub NETTOYAGE()
Dim plage As Range
Dim i As Long
Dim vval As String
'Plage de recherche ici G2 à Derniere cellule utilisée de colonne G
Set plage = Range("g2" & ":g" & Range("g65000").End(xlUp).Row) 'Range("g:g")

'Pour chaque cellule de la plage de recherche
For i = plage.Rows.Count To 1 Step -1
    If InStr(UCase(plage.Cells(i, 1)), "DATE") = 0 Then
        plage.Cells(i, 1).ClearContents
    End If
Next i
End Sub
 
Bonjour le forum
Bonjour Lionel, sylvanu, job75 & Vincent

@sylvanu : Pour que ton code soit efficace à 100%, je suis obligé de rajouter "+1" après Row dans le Set Plage sinon, il n'efface pas la dernière donnée ?
Cela me semble étrange dans la mesure où "chez Lionel", cela fonctionne.
Bon ouikand
@+ Eric c
 

Pièces jointes

Bonjour,
Bjr, je l'avais vu et mis dans le dernier fichier joint.
Exact, à cause du plage.Rows.Count, comme Plage commence à 2 il en manque 1 à la fin.

D'ailleurs, je pense qu'il y a encore plus simple :
Code:
Sub NETTOYAGES()
Dim L%
For L = 2 To Range("G65000").End(xlUp).Row
    If Left(Cells(L, "G"), 4) <> "Date" Then Cells(L, "G") = ""
Next L
End Sub
 

Pièces jointes

Re le fil
@lionel : Ce n'est pas mon code mais celui de notre ami sylvanu (que je salue). Dans le fichier que tu joints, teste le "Bouton" sylvanu et tu verras que la dernière valeur est toujours présente.... donc non effacée.
A moins que mes yeux soient fous lol, c'est bien ton code : j'ai juste mis G pour la colonne
Fichier joint à jour du nv code de Sylvanu
🙂
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
1 K
Retour