Bonjour,
Alors d'abord le test, est-ce If Range("C5") <> " " ou If Range("C5") <> "" ?
L'un fait un test sur un espace d'un caractère, l'autre une chaîne vide.
Si c'est la chaîne vide que l'on teste, je préfère la tester ainsi cela évite les problèmes.
If Len(Range("C5")) <> 0 Then Range("N5") = "G" Else Range("N5") = ""
Le test de comparaison <> 0 étant implicite, on peux raccourcir le test par
If Len(Range("C5")) Then Range("N5") = "G" Else Range("N5") = ""
Une autre façon d'écrire dans une cellule une valeur suivant une condition est l'utilisation de la fonction IIF dont la syntaxe est semblable à la formule SI d'excel. A savoir IIF(TestLogique, VRAI, FAUX)
Donc on pourrait écrire
Range("N5") = IIf(Len(Range("C5")), "G", "")
J'ajouterais en plus que c'est extrêmement dangereux d'écrire dans la cellule d'une feuille d'excel sans préciser la feuille ainsi que le classeur de la cellule de destination.
Soit
ThisWorkbook.Worksheets("Feuil1").Range("N5") = IIf(Len(ThisWorkbook.Worksheets("Feuil1").Range("C5")), "G", "")
Et pour faire plus court, on utilisera, le bloc With / End With
1 2 3
| With ThisWorkbook.Worksheets("Feuil1")
.Range("N5") = IIf(Len(.Range("C5")), "G", "")
End With |
Maintenant pour répondre à ton problème, l'utilisation d'un boucle en concaténant la colonne et le n° de la ligne est la solution.
Le code
1 2 3 4 5 6 7 8 9
| Sub Ecriture()
Dim ligne As Long
With ThisWorkbook.Worksheets("Feuil1")
' Boucle de la ligne 5 à la ligne 30
For ligne = 5 To 30
.Range("N" & ligne) = IIf(Len(.Range("C" & ligne)), "B", "")
Next ligne
End With
End Sub |
Si l'on craint l'encodage malheureux d'un espace ou plus d'ailleurs on peut ajouter dans le test la fonction TRIM
.Range("N" & ligne) = IIf(Len(Trim(.Range("C" & ligne))), "G", "")
Partager