(VB) Ma macro s'arrête en plein milieux!

VBdébutant

XLDnaute Nouveau
Bonjour à tous!

En tant que simple novice en Visual Basic, j'ai tenté de réaliser une macro qui génère des demande d'achat de façon manuel (sub), mais également de façon automatique (function).

J'ai été heureux de voir que la macro manuelle fonctionne à merveille, cependant, ma fonction automatique s'arrête en plein milieux lorsqu'elle est déclenchée... Et pourtant le simple fait de la déclencher appelle simplement la méthode manuelle de façon...automatique! (Est-ce assez clair?? :eek:)

Alors voila le principe:
La première feuille concerne la liste de produits contenus dans un magasin de stockage. La deuxième concerne la demande d'achat qui, lorsqu'elle est remplie, est envoyé au service achat.
J'aimerais que ma fonction ai le rôle suivant: lorsque le niveau de stock d'un produit passe en dessous du point de commande, la fonction est automatiquement déclenchée, demande l'autorisation à l'utilisateur, et génère la macro manuelle.
Malheureusement, la fonction se contente d'ouvrir les msgbox mais ne copie pas les cellules aux emplacement voulus!


Voici la sub():
Sub Bouton57_QuandClic()
Dim response As String
Dim infoYES As String
Dim infoNO As String
Dim Attention1 As String
Dim Attention2 As String
Dim Attention3 As String
Dim Attention4 As String
Dim Attention5 As String
Dim Attention6 As String
Dim i As String
Dim j As String
Dim k As String
Dim Code As String
Dim l As Integer
Dim q As Integer
Dim p As Integer

Sheets(1).Activate

Application.StatusBar = "Programme spécifique au magasin PDR."

Code = InputBox("Veuillez entrer le code relatif au produit (1ère colonne du tableau).", "Code")

If Code = "" Then
Exit Sub
Else
Code = Code + 1

i = Worksheets(1).Cells(Code, 5).Value
j = Worksheets(1).Cells(Code, 4).Value
k = Worksheets(1).Cells(Code, 6).Value
p = Worksheets(1).Cells(Code, 9).Value

response = MsgBox("Etes-vous sûr de vouloir ajouter ce produit à la demande d'achat?" & vbCrLf & vbCrLf & i & " - " & j & " - " & k & ".", vbYesNo + vbQuestion, "Demande de confirmation")

If response = vbYes Then

Sheets(2).Select
Range("A15:J15").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select

l = ActiveCell.Row


If Sheets(1).Cells(Code, 14) = "" Then
Attention1 = InputBox("Combien de " & i & "s voulez-vous acheter?" & vbCrLf & "La quantité à commander sera établie par défaut pour la prochaine commande.", "Quantité à commander", "Indiquez ici la quantité à commander")
Worksheets(2).Cells(l, 1) = Attention1
Else
Worksheets(2).Cells(l, 1) = Worksheets(1).Cells(Code, 14)
End If

If Sheets(1).Cells(Code, 5) = "" Then
Attention2 = InputBox("Le type de pièce est inconnu. Veuillez indiquer la nature du produit ci-dessous (ex: contacteur)." & vbCrLf & "Le type de produit entré sera établi par défaut dans la liste pdr et pour la prochaine commande de ce produit.", "Type de pièce", "Indiquez ici le type de pièce à commander (ex: contacteur)")
Worksheets(2).Cells(l, 2) = Attention2
Else
Worksheets(2).Cells(l, 2) = Worksheets(1).Cells(Code, 5)
End If

If Sheets(1).Cells(Code, 6) = "" Then
Attention3 = InputBox("L'article que vous souhaitez commander ne présente pas de caractéristique. Si nécessaire, veuillez indiquer ci-dessous des caractéristiques du produit (ex: 24VDC / 0,75Hz)." & vbCrLf & "Les caractéristiques entrées seront établies par défaut dans la liste pdr et pour la prochaine commande de ce produit.", "Caractéristique de la pièce", "Indiquez ici les caractéristiques de la pièce à commander (facultatif)")
Worksheets(2).Cells(l, 5) = Attention3
Else
Worksheets(2).Cells(l, 5) = Worksheets(1).Cells(Code, 6)
End If

If Sheets(1).Cells(Code, 4) = "" Then
Attention4 = InputBox("La référence du " & i & " est inconnu. Veuillez la spécifier ci-dessous pour qu'elle apparaisse dans la demande d'achat." & vbCrLf & "La référence entrée sera établi par défaut dans la liste pdr et pour la prochaine commande de ce produit.", "Référence", "Indiquez ici la référence de la pièce à commander (ex: CD40-LN3)")
Worksheets(2).Cells(l, 8) = Attention4
ElseIf Sheets(1).Cells(Code, 4) = "Pas de ref." Then
Attention4 = InputBox("La référence du " & i & " est inconnu. Veuillez la spécifier ci-dessous pour qu'elle apparaisse dans la demande d'achat." & vbCrLf & "La référence entrée sera établi par défaut dans la liste pdr et pour la prochaine commande de ce produit.", "Référence", "Indiquez ici la référence de la pièce à commander (ex: CD40-LN3)")
Worksheets(2).Cells(l, 8) = Attention4
Else
Worksheets(2).Cells(l, 8) = Worksheets(1).Cells(Code, 4)
End If

If Sheets(1).Cells(Code, 19) = "" Then
Attention5 = InputBox("Le prix de la pièce est inconnu. Veuillez indiquer l'indiquer ci-dessous pour qu'il apparaisse dans la demande d'achat." & vbCrLf & "Le prix entré sera établi par défaut pour la prochaine commande de ce produit.", "Prix de la pièce", "Indiquez ici le prix unitaire de la pièce à commander")
Worksheets(2).Cells(l, 10) = Attention5
ElseIf Sheets(1).Cells(Code, 19) = 0 Then
Attention5 = InputBox("Le prix de la pièce est inconnu. Veuillez indiquer l'indiquer ci-dessous pour qu'il apparaisse dans la demande d'achat." & vbCrLf & "Le prix entré sera établi par défaut pour la prochaine commande de ce produit.", "Prix de la pièce", "Indiquez ici le prix unitaire de la pièce à commander")
Worksheets(2).Cells(l, 10) = Attention5
Else
Worksheets(2).Cells(l, 10) = Worksheets(1).Cells(Code, 19)
End If

If Sheets(1).Cells(Code, 21) = "" Then
Attention6 = InputBox("Quel fournisseur voulez-vous attribuer à cette référence?" & vbCrLf & "Le fournisseur sera établi par défaut pour la prochaine commande de ce produit." & vbCrLf & "Exemple de fournisseur: Brammer", "Fournisseur non attribué", "Indiquez ici le nom du fournisseur associé")
Worksheets(2).Cells(23, 3) = Attention6
Else
Worksheets(2).Cells(23, 3) = Worksheets(1).Cells(Code, 21)
End If

i = Worksheets(2).Cells(l, 2).Value
j = Worksheets(2).Cells(l, 8).Value
k = Worksheets(2).Cells(l, 5).Value
q = Worksheets(2).Cells(l, 1).Value

Worksheets(1).Cells(Code, 5).Value = i
Worksheets(1).Cells(Code, 4).Value = j
Worksheets(1).Cells(Code, 6).Value = k
Worksheets(1).Cells(Code, 14).Value = q
Worksheets(1).Cells(Code, 9).Value = Worksheets(2).Cells(l, 10).Value
Worksheets(1).Cells(Code, 21).Value = Worksheets(2).Cells(23, 3).Value

infoYES = MsgBox(("Le " & i & " " & j & " " & k & " a été ajouté à la Demande d'Achat. Veuillez vérifier la cohérence des informations sur la feuille <DA>."), vbOKOnly + vbInformation, "Article ajouté à la Demande d'achat")

Sheets(2).Visible = xlSheetVisible
Sheets(2).Activate

Else
infoNO = MsgBox(("Le " & i & " " & j & " " & k & " n'a pas été ajouté à la Demande d'Achat."), vbOKOnly + vbInformation, "Annulation")

End If

End If

End Sub



Donc pour la macro sub comme je vous l'ai dit, tout fonctionne parfaitement. Par contre, la fonction ne marche pas:


Function CommandeAuto(r As String) As String

If r = "OUI" Then
CommandeAuto = MsgBox("Le stock de ce produit est passé à 0._
Voulez-vous générer une Demande d'Achat?", _
vbYesNo + vbQuestion, "Niveau de stock nul")

If CommandeAuto = vbYes Then
Call Bouton57_QuandClic
ElseIf CommandeAuto = vbNo Then
CommandeAuto = MsgBox("Votre niveau de stock est inférieur au point_
de commande! Le programme a donc modifié votre point de_
commande automatiquement.", vbOKOnly + vbCritical)
End If

ElseIf r = "NON" Then
Exit Function
End If

End Function


Je sais que mon problème est délicat et long à traiter, mais si certain d'entre vous ont des remarques ou des indices, je les accepterai avec plaisir!

Merciiiii beaucoup! :)



VBdébutant.


PS: J'ai joint le fichier au post, mais pour des raison de taille, j'ai été obligé de virer la presque totalité du fichier, dont les macros... Ceux qui souhaite accéder au fichier devront coller les macros que j'ai mis au dessus (dans un module)! Désolé... Et merci encore... :)
 

Pièces jointes

  • Liste PDR - Demande d'Achat - Copie.xls
    44.5 KB · Affichages: 104

jeanpierre

Nous a quitté
Repose en paix
Re : (VB) Ma macro s'arrête en plein milieux!

Bonjour VBdébutant et Bienvenue sur le forum XLD,

Puisque tu es nouveau, tu pouvais tout laisser sur ton fichier et le zipper avec Windows (version 2000 et supérieures), Clic droit sur ton fichier et envoyer vers/Dossier compressé....

Aussi simple que cela et pour l'avenir.

Bon WE.

Jean-Pierre
 

ROGER2327

XLDnaute Barbatruc
Re : (VB) Ma macro s'arrête en plein milieux!

Bonjour
Je crains que votre problème n'ait pas de solution : une fonction doit, par principe, traiter des données et renvoyer une valeur (numérique ou alphanumérique) dans la cellule où elle est inscrite.
Mais les ressources de ce forum sont surprenantes : un démenti de mon avis n'est pas à exclure...​
Bon courage !
ROGER2327
 

pierrejean

XLDnaute Barbatruc
Re : (VB) Ma macro s'arrête en plein milieux!

bonjour VBdebutant

Ta fonction me parait beaucoup trop recursive !!

Teste ceci

Code:
Function CommandeAuto(r As String) As String
If r = "OUI" Then Commande = MsgBox("Le stock de ce produit est passé à 0._ Voulez-vous générer une Demande d'Achat?", _
vbYesNo + vbQuestion, "Niveau de stock nul")
If Commande = vbYes Then
Call Bouton57_QuandClic
ElseIf Commande = vbNo Then CommandeAuto = MsgBox("Votre niveau de stock est inférieur au point_ de commande! Le programme a donc modifié votre point de_commande automatiquement.", vbOKOnly + vbCritical)
End If
If r = "NON" Then
Exit Function
End If
End Function

Edit: Salut Jeanpierre
Salut ROGER
 

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin