Remplacer le contenu d'une cellule par vide
J'ai fait une boucle qui dit de remplacer le contenu de la colone 18 selon une matrice d'équivalence établie dans la colone 5 et 6 de la feuille DATA. Jusqu'à maintenant ça marche. Cependant je veut dire à la colonne 18 que si le contenu ne correspond à rien dans la matrice d'équivalence (colone 6) de se mettre vide.
Boucle fonctionnelle:
For i = 1 To 65000
If ActiveSheet.Cells(1 + i, 18) = "" Then Exit For
For j = 1 To 500
If ActiveSheet.Cells(i + 1, 18) = Sheets("DATA").Cells(j, 6) Then
ActiveSheet.Cells(i + 1, 18).Value = Sheets("DATA").Cells(j, 5).Value
Exit For
End If
Next j
Next i
Où ça bloque:
For i = 2 To 65000
If ActiveSheet.Cells( i, 18) = "" Then Exit For
For j = 2 To 500
If ActiveSheet.Cells(i, 18) = Sheets("DATA").Cells(j, 6) Then
ActiveSheet.Cells(i, 18).Value = Sheets("DATA").Cells(j, 5).Value
Exit For
Else: ActiveSheet.Cells(i, 18).Value = ""
End If
Next j
Next i
Pouvez-vous m'aider?
Bonjour mimimo,
Pas facile d'être catégorique avec un extrait de code apparemment incomplet, mais ce que je peux te dire :
Il me semble qu'il faille supprimer la deuxième ligne (celle que j'ai mise en commentaire), car si tu effaces la cellule Cells(i,18), cela met fin à la première boucle (i).
For i = 2 To 65000
'If ActiveSheet.Cells( i, 18) = "" Then Exit For
For j = 2 To 500
If ActiveSheet.Cells(i, 18) = Sheets("DATA").Cells(j, 6) Then
ActiveSheet.Cells(i, 18).Value = Sheets("DATA").Cells(j, 5).Value
Exit For
Else: ActiveSheet.Cells(i, 18).Value = ""
End If
Next j
Next iCordialement.
Désolée, de ne pas avoir fournit le code au complet. Votre suggestion ne fonctionen pas.
J'ai fait un petit exemple ici en fichier joint.
Au lieu d'être la colone 18 c'est la colone 7. Je veut que l'abréviation du pays de la colonne 7 soit remplacé par le nom complet en fonction de la matrice d'équivalence de la feuille DATA. Lorsque la valeur de la colonne 7 ne correspond à rien, je veux qu'elle se mette à vide.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
For i = 1 To 65000
For j = 1 To 500
If ActiveSheet.Cells(i + 1, 7) = Sheets("DATA").Cells(j, 6) Then
ActiveSheet.Cells(i + 1, 7).Value = Sheets("DATA").Cells(j, 5).Value
Exit For
Else: ActiveSheet.Cells(i + 1, 7).Value = ""
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub
Bonjour,
Tu peux essayer avec ce code
Private Sub CommandButton1_Click()
Dim Cel As Range, C As Range
Application.ScreenUpdating = False
With Worksheets("DATA").Columns(6)
For Each Cel In Range("G2:G" & Range("G" & Rows.Count).End(xlUp).Row)
Set C = .Find(Cel, LookIn:=xlValues, lookat:=xlWhole)
If Not C Is Nothing Then
Cel = C.Offset(0, -1).Value
Else
Cel = ""
End If
Next Cel
End With
Application.ScreenUpdating = True
End SubA+
Bonjour Frangy!
Ça marche super bien, merci énormément
Bonsoir mimimo, frangy,
mimimo, après une absence momentanée du site, j'ai repris le travail entamé sur ton code.
Je te propose donc le fruit de mes réflexions.
NB : sauf erreur de ma part, sur le fichier code transmis par frangy, il y a un bug. En effet,la distinction ne se fait pas entre "Sl" (Slovenia) et "SL (Sierra Leone). C'est en tout cas ce que j'ai constaté lors de ma première ébauche et c'est la raison pour laquelle j'ai dû abandonner provisoirement. J'ai donc repris la méthodologie et j'utilise dès lors deux boucles de comparaison, après avoir stocké les abréviations dans un tableau pour augmenter la rapidité d'exécution.
Je te laisse le soin de vérifier, sachant que j'ai ajouté Sl et SL pour étayer mes dires.
Cordialement.
Bonsoir mimimo, Papou-net,
Ce sont les yeux qui buguentsauf erreur de ma part, sur le fichier code transmis par frangy, il y a un bug. En effet,la distinction ne se fait pas entre "Sl" (Slovenia) et "SL (Sierra Leone).
L’abréviation de Slovenia n’est pas "Sl", avec le "l" de "lima" mais "SI", avec le "I" de "india".
A+
frangy a écrit :Bonsoir mimimo, Papou-net,
Ce sont les yeux qui buguentsauf erreur de ma part, sur le fichier code transmis par frangy, il y a un bug. En effet,la distinction ne se fait pas entre "Sl" (Slovenia) et "SL (Sierra Leone).
L’abréviation de Slovenia n’est pas "Sl", avec le "l" de "lima" mais "SI", avec le "I" de "india".
A+
RE : frangy,
Arf, au temps pour moi, j'ai "bossé" pour rien.
Enfin, presque pour rien, car ça m'a permis de tester une fonction que je n'avais encore jamais utilisée et qui garantit une comparaison sans équivoque. Ca pourra toujours (me) servir dans d'autres cas.
Cordialement.
PS : pourtant chez moi, ça me ressortait systématiquement SIERRA LEONE (SL) au lieu de SLOVENIA (SI)