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

Usine à gaz

XLDnaute Barbatruc
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

  • Date CelCol test.xlsm
    23.1 KB · Affichages: 11
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

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Date CelCol test.xlsm
    20.7 KB · Affichages: 3

job75

XLDnaute Barbatruc
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+
 

vgendron

XLDnaute Barbatruc
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
 

Eric C

XLDnaute Barbatruc
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

  • Effacer cells si valeur différente du mot Date (1).xlsm
    17.9 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Date CelCol test (1).xlsm
    22.4 KB · Affichages: 2

Usine à gaz

XLDnaute Barbatruc
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

  • Date CelCol test.xlsm
    27.7 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 104
Membres
112 661
dernier inscrit
ceucri