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