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.
 

Fichiers joints

vgendron

XLDnaute Barbatruc
Bonjour
c'est sympa des images..... mais ca ne donne rien...
au hasard.. ta range ("StockT_01") est elle bien définie?
 

Koky Dramé

XLDnaute Nouveau
Bonjour vgendron,
Oui la range("StocksT_01") est bien définie. Voici le fichier. Je me demande maintenant si j'ai bien fait de définir Row, 1 au lieu de Row, 3 par exemple.
Merci
 

Fichiers joints

vgendron

XLDnaute Barbatruc
Dans le fichier que tu as posté.. il n'y a pas la macro..
je ne vais quand meme pas recopié ton code que tu as mis juste en image..
 

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).
 

Fichiers joints

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
 

Koky Dramé

XLDnaute Nouveau
Bonsoir Koky Dramé, vgendron,

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+
Et quel sera le message d'alerte à afficher
 

Discussions similaires


Haut Bas