Si valeur colonne D ne commence pas par 606 ou 611 alors valeur colonne C (VBA)

nhanvin

XLDnaute Nouveau
Bonjour à tous,

Voici mon but: Si dans la colonne D la valeur de la cellule est ne commence pas par 606 ou 611 alors la valeur dans la colonne C est "SGA".

Ci-dessous la macro que j'ai faîte mais qui ne fonctionne pas d'où l'existence de cette question:

Sub SGA()


Range("D1:D1000").Select
For i = 1 To 1000
Next
If Range.Value <> "606*" And If Range.Value <> "611*" Then
Range("D1:D1000").Offset(0, 1).Value = "SGA"

End If
End Sub


Merci d'avance
Vinh
 

DL_13

XLDnaute Occasionnel
Re : Si valeur colonne D ne commence pas par 606 ou 611 alors valeur colonne C (VBA)

Bonjour,

Essaye ce code qui pourrait faire l'affaire si j'ai bien compris

Code:
Option Explicit

Sub SGA()
Dim i As Integer
For i = 1 To 1000
      If Range("D" & i).Value Like "606*" Or Range("D" & i).Value Like "611*" Then Range("D" & i).Offset(, 1).Value = "SGA" 
Next i
End Sub
Désolé pas vu NE Commence pas par

autre code qui fait l'inverse

Code:
Option Explicit

Sub SGA()
Dim i As Integer
For i = 1 To Range("D65530").End(xlUp).Row
    If Range("D" & i) Like "606*" Or Range("D" & i) _
        Like "611*" Or Range("D" & i) = "" Then
        Range("D" & i).Offset(, 1) = ""
            Else
        Range("D" & i).Offset(, 1) = "SGA"
    End If
Next i
End Sub
Bonne Journée
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Si valeur colonne D ne commence pas par 606 ou 611 alors valeur colonne C (VBA)

Salut nhanvin et le forum
Utilise les balises de code (# en mode avancé)
Une autre proposition :
Code:
Sub SGA()
Dim X As Long
For X = 1 To 1000
    If Left(Range("D" & X), 3) <> "606" And _
       Left(Range("D" & X), 3) <> "611" And _
       Range("D" & X) <> "" Then Range("D" & X).Offset(0, 1) = "SGA"
Next X
End Sub
Petites critiques de ton code original :
- Pourquoi de 1 à 1000 ? S'il y a une raison précise, c'est bon, mais si c'est arbitraire, il vaut mieux demander à Excel de définir sa limite. Un code du genre :
Code:
cells(rows.count,"D").end(xlup).row
définira la dernière ligne de D non vide

- Si tu veux faire une boucle pour parcourir une plage et effectuer une opération sur chaque cellule, il faut que ton traitement soit à l'intérieur de ta boucle.

- Chaque traitement doit concernée une et une seule cellule, pas toutes les cellules à la fois (du moins dans cette formulation).

Le VBA est un interprétateur de texte => la syntaxe doit être extrêmement précise, sous peine de ne pas être comprise par le compilateur.
Il faut différencier le français ou l'anglais d'un langage de code.
Par exemple, on dit :
si A est différent de X ou de Y alors
en code, ça donne
si A<>X and A<>Y alors
C'est la même chose, mais c'est un peu différent => ça t'impose d'apprendre un nouveau langae, avec ses termes et ses règles propres.
A+
 

Discussions similaires

Réponses
7
Affichages
237
Réponses
7
Affichages
361