Variables non déclarées
Bonsoir
.. je reviens sur la procédure ci-dessous..
Dans un exemple trouvé sur ce forum (en PJ)...et qui fonctionne, dans Userform_initialize, la variable "dl" apparaît non déclarée idem pour "re" dans Commandbutton...
Aucune erreur n'est signalée et les valeurs sont passées... comment est-ce possible ?
Private Sub CommandButton1_Click()
With Sheets("bdd")
'dl est la référence de a ligne,valeur, récupérée dans Userform
dl = .Cells(Rows.Count, 1).End(xlUp).Row
'ComboBox1.Value=valeur saisie
Set re = .Range("A1").Resize(dl).Find(ComboBox1.Value, lookat:=xlWhole)
'Le mot clé Nothing permet de distinguer une variable objet d'un objet réel
If re Is Nothing Then
'ans =6. c'est la valeur affectée à vbYes, vbYesNo=4
ans = MsgBox("ajouter l'article " & ComboBox1.Text, vbYesNo)
If ans = vbYes Then
'incrémente la ligne de saisie
dl = dl + 1
'passe les valeurs saisies en colonnes A et B
.Cells(dl, 1) = ComboBox1.Text
.Cells(dl, 2) = TextBox1.Value + 0
End If
Else
'applique le décalage à la valeur re
re.Offset(, 1) = TextBox1.Value
End If
End With
End Sub
Private Sub UserForm_Initialize()
With Sheets("bdd")
'compte le nombre de lignes occupées
dl = .Cells(Rows.Count, 1).End(xlUp).Row
'fenêtre CBX vide
ComboBox1.Clear
'se positionne à la dernière ligne
For i = 2 To dl
ComboBox1.AddItem .Cells(i, 1)
Next i
End With
'lance l'affichage du formulaire
End Sub
Bonjour jpmalb,
En complément de la réponse de gmb (salut), j'ajoute que si tu mets en début de module « Option Explicit », c'est là où tu peux être sûr que ça bloquera à la compilation et qu'une erreur sera déclarée ! ⚠ cette détection doit être considérée comme un avantage !
dhany
Bonjour,
j'ai complété le code et adapté les commentaires
Option Explicit
Private Sub CommandButton1_Click()
Dim dl As Long, i As Long, re As Range, ans As Long
With Sheets("bdd")
'dl est le numéro de la dernière ligne utilisée sur base de la colonne 1 (=colonne A)
dl = .Cells(Rows.Count, 1).End(xlUp).Row
'ComboBox1.Value=valeur saisie
'on recherche dans la colonne A (dans la plage utilisée la valeur saisie
' re est l'objet correspondant à la cellule trouvée
Set re = .Range("A1").Resize(dl).Find(ComboBox1.Value, lookat:=xlWhole)
'Le mot clé Nothing permet de distinguer une variable objet d'un objet réel
' si re est rien, on n'a pas trouvé la valeur saisie dans la liste
If re Is Nothing Then
'ans =6. c'est la valeur affectée à vbYes, vbYesNo=4
ans = MsgBox("ajouter l'article " & ComboBox1.Text, vbYesNo)
If ans = vbYes Then
'incrémente la ligne de saisie
dl = dl + 1
'passe les valeurs saisies en colonnes A et B
.Cells(dl, 1) = ComboBox1.Text
.Cells(dl, 2) = TextBox1.Value + 0
End If
Else
'applique le décalage à la valeur re
' on met la quantité dans la cellule située une position à droite de la cellule trouvée (=colonne B)
re.Offset(, 1) = TextBox1.Value
End If
End With
End Sub
Private Sub UserForm_Initialize()
Dim dl As Long, i As Long
With Sheets("bdd")
'compte le nombre de lignes occupées
dl = .Cells(Rows.Count, 1).End(xlUp).Row
'fenêtre CBX vide
ComboBox1.Clear
'on remplit la liste combobox sur base des cellules en colonne 1 (=colonne A)
For i = 2 To dl
ComboBox1.AddItem .Cells(i, 1)
Next i
End With
'lance l'affichage du formulaire
End Sub