Microsoft 365 Userform avec liste déroulante et réslutat

ExcLnoob

XLDnaute Occasionnel
Bonjour,

Je me tourne vers vous car malgré mes efforts, je sèche... Je fais donc appel à des experts!
En espérant que vous puissiez m'aider...

Je m'explique :
Je cherche désespérément à créer un simulateur pour des utilisateurs.
J'ai un onglet excel avec tous mes tarifs et quelques formules afin de calculer un coût moyen avec un taux de variabilité selon les fournisseurs.
Je souhaiterai créer un bouton déclenchant un UserForm avec tous les scénarios possibles et que cela me donne un résultat selon le nombre de jours choisis et selon les choix appliqués. Que cela remplisse la bonne ligne comme actuellement avec la formule et pouvoir via une MEFC mettre la ligne en gras. En complément j'aimerai que l'utilisateur ne puisse pas déclencher le calcul s'il n'a pas rempli tous les champs et qu'il y ai un message d'erreur selon le champ non-rempli.

En gros, que l'UserForm marche comme le mini-tableau en cellule O16 (malgré qu'il manque la MEFC et le message d'erreur...)
J'ai déja créer le bouton ouvrant l'UserForm avec les champs à remplir, mais là, je bloque. De plus, je souhaiterai que le champ "Nbr de jours" soit libre comme en P16

J'espère avoir été clair, que cela vous interessera et que vous pourrez m'aider !
En PJ un tableau pour exemple

Merci d'avance pour votre support.
 

Pièces jointes

  • Classeur1.xlsm
    26.7 KB · Affichages: 35
Solution
Bonjour,
Ca fait plaisir d'avoir un retour. Ce n'est hélas pas toujours le cas !
Le principal est que la base soit posée et que l'appropriation se fasse.

La cellule à cibler est celle de la colonne M ligne "ligPays"
Pour cela j'ai modifié ligpays en ligpays(3) et créé une variable cible de type Range
Reste à la faire "ressortir" dans le tableau
Bonne continuation
PS : le module 3 ne sert à rien: il a été créé lors d'un enregistrement de macro. Il peut être supprimé.
VB:
Option Explicit

Dim strPays             As String
Dim strType             As String
Dim strMoteur           As String
Dim strFournisseur(3)   As String
Dim nbJours             As Integer


Sub Calculs()
    Dim strPays         As String
    Dim ligPays(3)      As Long...

ExcLnoob

XLDnaute Occasionnel
Bonsoir,
Pour mettre les listes dans les combobox, remplacer le code actuel par celui-ci dessous
Les noms des listes dans la feuille Paramètres ont été créés manuellement.Pour les créer automatiquement, ajouter la sub et la fonction ci-dessous dans le module

Dans le Thisworkbook, évènement Open
Code:
Private Sub Workbook_Open()
    MAJ_Listes_Combo
End Sub[

'----------------------------------------------------------------
' Remplacer dans l'évènement Initialize de l'USF
'----------------------------------------------------------------
Private Sub UserForm_Initialize()
    'Mettre les noms des Listes utilisées dans les combobox
    With combo_Pays
        .RowSource = "PaysLoc"
        .ListIndex = -1
    End With
    With combo_Moteur
        .RowSource = "Carburant"
        .ListIndex = -1
    End With
    With combo_Type
        .RowSource = "TypeAuto"
        .ListIndex = -1
    End With
    txt_nb_Jours.Text = ""
    lbl_Loueur.Caption = ""
End Sub


'----------------------------------------------------------
' A mettre dans le module
'----------------------------------------------------------
Sub MAJ_Listes_Combo()
    Dim derLig      As Long
    Dim rng         As Range
    Dim nomRng      As String
   
    With Sheets("Paramètres Listes")
        'Liste Pays en colonne A
        derLig = .Range("A10000").End(xlUp).Row
        Set rng = .Range("A2:A" & derLig)
        nomRng = "PaysLoc"
        MAJ_Plage nomRng, rng
       
        'Liste Carburant en colonne C
        derLig = .Range("C10000").End(xlUp).Row
        Set rng = .Range("C2:C" & derLig)
        nomRng = "Carburant"
        MAJ_Plage nomRng, rng
       
        'Liste Type Auto en colonne E
        derLig =. Range("E10000").End(xlUp).Row
        Set rng =.Range("E2:E" & derLig)
        nomRng = "TypeAuto"
        MAJ_Plage nomRng, rng
    End With
End Sub

Function MAJ_Plage(strNom As String, plgRng As Range)
    On Error Resume Next
    ThisWorkbook.Names.Delete strNom
    ThisWorkbook.Names.Add Name:=strNom, RefersTo:=plgRng
End Function

Ca y est!!! J'avais omis les listes de nom via le gestionnaire
Maintenant ça fonctionne
Bon du coup j'ai tellement fais de manips que la formule de calcul ne me prends plus en compte le dernier fournisseur et que mes 2 codes pour le refresh du tableau à la réouverture et le retrait de la croix rouge ne marche plus...
Une journée sur Excel m'a mis les yeux en vrac... Je vais bosser dessus plus tard!
Merci encore de l'aide!!! C'est vraiment Génial
 

ExcLnoob

XLDnaute Occasionnel
Bonjour ExcLnoob, Pounet95, le forum,
Une autre solution à tester.
Dans le formulaire, j’ai ajouté le Coût moyen du carburant pour une journée. Actuellement, celui-ci est fixe.
Lorsque le coût véhicule choisi est égal à 0, j’ai remplacé celui-ci par 5 000, afin que le Coût moyen total soit très élevé. A revoir pour la présentation.
Cordialement,
Bernard

Bonsoir,
Désolé de ma réponse tardive
J'ai bien tester votre tableau mais j'étais déja bien avancé sur la solution précédente, qui s'adapte parfaitement à mon besoin.
Merci pour votre aide!
 

Discussions similaires

Réponses
2
Affichages
282
Réponses
1
Affichages
115
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 215
Messages
2 086 318
Membres
103 176
dernier inscrit
jean.yvesjean.yves