tsikoudia91
XLDnaute Nouveau
Bonsoir à tous,
Mon boss ayant refusé de me payer une formation VBA ("ben pourquoi ? on trouve tout sur Internet maintenant…") je suis contrainte avec plus ou moins de bonheur de fureter de çi de là, en copiant bêtement des codes qui approcheraient de près ou de loin ma problématique.
J'ai ainsi pu créer des formulaires simples (boutons "command" associés à une macro, par exemple).
Mais copier bêtement, c'est peut-être bien, comprendre ce que je fais, ce serait beaucoup mieux !
Vous l'aurez compris, mon niveau s'apparente à débutant, avec quelques notions.
Mon défi du mois : éditer un modèle de facture selon les options sélectionnées.
J'ai donc créé un classeur Excel, avec une feuille de "Bienvenue" puis chaque feuille comporte un modèle de facture.
A l'ouverture, toutes les feuilles doivent être cachées, sauf "Bienvenue" évidemment où va s'afficher un premier formulaire.
J'avais dans l'idée de définir pour chaque feuille la propriété 0-xlSheetHidden ou 2-xlSheetVeryhidden ou d'utiliser le code suivant :
.ActiveWindow.DisplayWorkbookTabs = False
J'indiquerais ces codes à la toute fin, lorsque les formulaires seront finalisés.
En tout premier lieu, j'ai créé un UserForm1 avec deux groupes d'options
1° Frame1 = choix de la langue dans laquelle va être rédigée la facture
- en français (Option Button = optFR)
- en anglais (OptionButton = optENG)
2° Frame2 = pays de résidence du client
- France (Option Button = optFrance)
- UE (Option Button = optUE)
- Autres (OptionButton = optAutres)
Il y a 6 modèles de facture
Sheet2 = FR_FR = facture en français +client en France
Sheet3 = FR_UE = facture en français +client UE
Sheet4 = FR_Autres = facture en français +client Autres pays
Sheet5 = ENG_France = facture en anglais +client en France (modèle à venir)
Sheet6 = ENG_UE = facture en anglais +client UE (modèle à venir)
Sheet7 = ENG_Autres = facture en anglais + client Autres pays (modèle à venir)
Ce que j'aimerais obtenir, c'est une fois les options sélectionnées (langue + pays), le modèle de la facture correspondante s'affiche.
Pour cela, je voudrais également insérer une MsgBox avec deux boutons "Valider" et "Annuler". Je crois comprendre le code mais je ne sais pas où/comment l'insérer. Dans un module peut-être ? Dans ce cas, comment faire en sorte de la "charger" ?
Private Sub optFR_Click()
If optFrance.Value = True Then
'MsgBox = Modèle de facture choisi (langue + pays) ici français/France
Select Case MsgBox ("- Facture en français" & Chr(10) & "- Client France", vbOKCancel, "Modèle sélectionné")
Case vbOK
'procédure si click sur Ok
Sheet2.Visible = True
Sheet1.Visible = False
UserForm1.Hide
Case vbCancel
'procédure si click sur Annuler
'vider le formulaire = choix d'un autre modèle
Frame1.ClearContents
Frame2.ClearContents
End Select
End If
End Sub
----------
Voilà pour les deux premiers problèmes.
Troisième problème : tous les champs du formulaire doivent être complétés (utilisation d'une MsgBox… et comme pour le problème n°2 : oui mais où/comment ? )
MsgBox Texte + icône Exclamation
Select Case MsgBox("Tous les champs doivent être complétés", vbQuestion, "Attention")
End Select
End Sub
----------
Quatrième problème : j'ai fait en sorte que lorsque il y a une remise ou des débours (option button "oui") la case "montant" s'affiche. Comment puis-je faire quand on sélectionne "non" que le montant soit égal à 0 dans le modèle de facture ?
Voici le code utilisé – qui ne fonctionne pas évidemment :
Private Sub OptRemise_oui_Click()
Label20.Visible = True
TextBox13.Visible = True
End Sub
Private Sub OptRemise_non_Click()
Label20.Visible = False
TextBox13.Visible = False
With Worksheets("FR_FR")
Position = .Range("B25").Value = "0"
'pas de remise -> taux = 0
End With
End Sub
Private Sub OptDebours_oui_Click()
Label21.Visible = True
TextBox14.Visible = True
End Sub
Private Sub OptDebours_non_Click()
Label21.Visible = False
TextBox14.Visible = False
With Worksheets("FR_FR")
Position = .Range("L31").Value = "0"
'pas de débours -> montant = 0
End With
End Sub
----------
Enfin, dernier problème : comment éviter de créer un formulaire pour chaque modèle de facture ? Par exemple, pour le modèle FR_UE, la seule différence avec le modèle FR_FR est le n° de TVA intra-communautaire. Dans ce cas, une fois les options choisies (langue + pays), j'imagine que la textbox TVA devrait s'afficher (oui.. mais comment faire ? )
J'oubliais : je voudrais que tant que le modèle de facture n'est pas choisi et complété, on ne peut pas sauvegarder le document.
Pour une meilleure compréhension, je joins le document.
Merci d'avance pour toute l'aide que vous voudrez bien m'apporter.
G.
Mon boss ayant refusé de me payer une formation VBA ("ben pourquoi ? on trouve tout sur Internet maintenant…") je suis contrainte avec plus ou moins de bonheur de fureter de çi de là, en copiant bêtement des codes qui approcheraient de près ou de loin ma problématique.
J'ai ainsi pu créer des formulaires simples (boutons "command" associés à une macro, par exemple).
Mais copier bêtement, c'est peut-être bien, comprendre ce que je fais, ce serait beaucoup mieux !
Vous l'aurez compris, mon niveau s'apparente à débutant, avec quelques notions.
Mon défi du mois : éditer un modèle de facture selon les options sélectionnées.
J'ai donc créé un classeur Excel, avec une feuille de "Bienvenue" puis chaque feuille comporte un modèle de facture.
A l'ouverture, toutes les feuilles doivent être cachées, sauf "Bienvenue" évidemment où va s'afficher un premier formulaire.
J'avais dans l'idée de définir pour chaque feuille la propriété 0-xlSheetHidden ou 2-xlSheetVeryhidden ou d'utiliser le code suivant :
.ActiveWindow.DisplayWorkbookTabs = False
J'indiquerais ces codes à la toute fin, lorsque les formulaires seront finalisés.
En tout premier lieu, j'ai créé un UserForm1 avec deux groupes d'options
1° Frame1 = choix de la langue dans laquelle va être rédigée la facture
- en français (Option Button = optFR)
- en anglais (OptionButton = optENG)
2° Frame2 = pays de résidence du client
- France (Option Button = optFrance)
- UE (Option Button = optUE)
- Autres (OptionButton = optAutres)
Il y a 6 modèles de facture
Sheet2 = FR_FR = facture en français +client en France
Sheet3 = FR_UE = facture en français +client UE
Sheet4 = FR_Autres = facture en français +client Autres pays
Sheet5 = ENG_France = facture en anglais +client en France (modèle à venir)
Sheet6 = ENG_UE = facture en anglais +client UE (modèle à venir)
Sheet7 = ENG_Autres = facture en anglais + client Autres pays (modèle à venir)
Ce que j'aimerais obtenir, c'est une fois les options sélectionnées (langue + pays), le modèle de la facture correspondante s'affiche.
Pour cela, je voudrais également insérer une MsgBox avec deux boutons "Valider" et "Annuler". Je crois comprendre le code mais je ne sais pas où/comment l'insérer. Dans un module peut-être ? Dans ce cas, comment faire en sorte de la "charger" ?
Private Sub optFR_Click()
If optFrance.Value = True Then
'MsgBox = Modèle de facture choisi (langue + pays) ici français/France
Select Case MsgBox ("- Facture en français" & Chr(10) & "- Client France", vbOKCancel, "Modèle sélectionné")
Case vbOK
'procédure si click sur Ok
Sheet2.Visible = True
Sheet1.Visible = False
UserForm1.Hide
Case vbCancel
'procédure si click sur Annuler
'vider le formulaire = choix d'un autre modèle
Frame1.ClearContents
Frame2.ClearContents
End Select
End If
End Sub
----------
Voilà pour les deux premiers problèmes.
Troisième problème : tous les champs du formulaire doivent être complétés (utilisation d'une MsgBox… et comme pour le problème n°2 : oui mais où/comment ? )
MsgBox Texte + icône Exclamation
Select Case MsgBox("Tous les champs doivent être complétés", vbQuestion, "Attention")
End Select
End Sub
----------
Quatrième problème : j'ai fait en sorte que lorsque il y a une remise ou des débours (option button "oui") la case "montant" s'affiche. Comment puis-je faire quand on sélectionne "non" que le montant soit égal à 0 dans le modèle de facture ?
Voici le code utilisé – qui ne fonctionne pas évidemment :
Private Sub OptRemise_oui_Click()
Label20.Visible = True
TextBox13.Visible = True
End Sub
Private Sub OptRemise_non_Click()
Label20.Visible = False
TextBox13.Visible = False
With Worksheets("FR_FR")
Position = .Range("B25").Value = "0"
'pas de remise -> taux = 0
End With
End Sub
Private Sub OptDebours_oui_Click()
Label21.Visible = True
TextBox14.Visible = True
End Sub
Private Sub OptDebours_non_Click()
Label21.Visible = False
TextBox14.Visible = False
With Worksheets("FR_FR")
Position = .Range("L31").Value = "0"
'pas de débours -> montant = 0
End With
End Sub
----------
Enfin, dernier problème : comment éviter de créer un formulaire pour chaque modèle de facture ? Par exemple, pour le modèle FR_UE, la seule différence avec le modèle FR_FR est le n° de TVA intra-communautaire. Dans ce cas, une fois les options choisies (langue + pays), j'imagine que la textbox TVA devrait s'afficher (oui.. mais comment faire ? )
J'oubliais : je voudrais que tant que le modèle de facture n'est pas choisi et complété, on ne peut pas sauvegarder le document.
Pour une meilleure compréhension, je joins le document.
Merci d'avance pour toute l'aide que vous voudrez bien m'apporter.
G.
Pièces jointes
Dernière édition: