Problème sur le code VBA

Koky Dramé

XLDnaute Nouveau
Bonjour, j'aurais besoin de votre aide sur mon code VBA. Quand je clique sur le bouton que j'ai créé et affecté une macro pour vérifier mon code , on me signale une erreur. L'image de la boîte de dialogue qui décèle l'erreur et celle de mon code VBA sont ci-jointes.
Merci d'avance.
 

Pièces jointes

  • 123.PNG
    123.PNG
    4 KB · Affichages: 47
  • Code.PNG
    Code.PNG
    53 KB · Affichages: 46

Koky Dramé

XLDnaute Nouveau
An OK, je vois....Quand j'enregistrais le fichier, il y avait Classeur en macro or l'un enregistrait le fichier sous format xltm et je le choisissais sans le savoir, du coup je ne pouvais pas joindre un fichier de cette extension, désolé. Voici le nouveau (enfin le même avec un format xlsm).
 

Pièces jointes

  • Test21111.xlsm
    102.1 KB · Affichages: 21

vgendron

XLDnaute Barbatruc
Essaie ceci

VB:
Sub Macro01()
Dim StocksT01 As Range
For Each Valeur In ActiveSheet.Range("StocksT_01")
    If Valeur > 50 And Valeur < 100 Then
        MsgBox "Niveau de stock de" & Valeur & "Tigo moyen.", vbInformation, "Niveau de stock faible"
    End If
    If Valeur < 50 Then
        MsgBox "La référence: " & Valeur.Offset(0, -3) & " doit être commandée.", vbCritical, "Quantité en stock insuffisante"
    End If
Next Valeur
End Sub
 

Koky Dramé

XLDnaute Nouveau
Merci beaucoup vgendron, ça a marché à merveille. J'aurai juste deux ou trois questions à propos...
Pourquoi vous n'avez pass eu besoin de cette ligne (Valeur = Cells(StocksT_01.Row, 1)) dans votre code?
Pourquoi "Valeur" après Next?
Pourquoi le mien ne marchait, quelle étai(en)t m(es)on erreur?
Merci encore un fois
 

vgendron

XLDnaute Barbatruc
For each Valeur in range
Valeur.. c'est déjà la valeur.. et pas l'adresse;; donc pas besoin des "Cells(StocksT_01.Row, 1)) "

next valeur.. c'est une question de syntaxe... ce n'est pas obligatoire.. mais quand il y a plusieurs "for" imbriqués sans indentation.. c'est plus pratique pour voir à quel moment la boucle est fermée..
tout comme
if condition then
action
else
end if

si tu ne fais rien dans le else..pas besoin de le mettre.. ca surcharge le code inutilement
d'ailleurs.. on pourrait meme écrire
if condition then action
mais la.. perso..j'aime pas...
juste une question de gout..
j'imagine qu'à un niveau supérieur de codage (avec optimisation d'execution), il vaut mieux limiter le nombre de lignes.. mais.. ca.. vu mon utilisation.. je n'en suis pas à ce niveau..
 

job75

XLDnaute Barbatruc
Bonsoir Koky Dramé, vgendron,
j'imagine qu'à un niveau supérieur de codage (avec optimisation d'execution), il vaut mieux limiter le nombre de lignes.. mais.. ca.. vu mon utilisation.. je n'en suis pas à ce niveau..
Chez moi ce code s'effectue en 1 seconde :
Code:
Sub a()
t = Timer
For i = 1 To 100000000
Next
MsgBox Timer - t
End Sub
J'ai ensuite inséré 1000 lignes vides dans la boucle For/Next : la durée reste exactement la même.

A+
 

Koky Dramé

XLDnaute Nouveau
For each Valeur in range
Valeur.. c'est déjà la valeur.. et pas l'adresse;; donc pas besoin des "Cells(StocksT_01.Row, 1)) "

next valeur.. c'est une question de syntaxe... ce n'est pas obligatoire.. mais quand il y a plusieurs "for" imbriqués sans indentation.. c'est plus pratique pour voir à quel moment la boucle est fermée..
tout comme
if condition then
action
else
end if

si tu ne fais rien dans le else..pas besoin de le mettre.. ca surcharge le code inutilement
d'ailleurs.. on pourrait meme écrire
if condition then action
mais la.. perso..j'aime pas...
juste une question de gout..
j'imagine qu'à un niveau supérieur de codage (avec optimisation d'execution), il vaut mieux limiter le nombre de lignes.. mais.. ca.. vu mon utilisation.. je n'en suis pas à ce niveau..
OK je vois, je suis débutant et je me rend compte que j'ai beaucoup d'astuces à mettre en tête.
Merci beaucoup encore une fois
 

Discussions similaires

Réponses
9
Affichages
149
Réponses
8
Affichages
136

Statistiques des forums

Discussions
312 083
Messages
2 085 178
Membres
102 808
dernier inscrit
guo