IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lien entre 2 Userform [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut Lien entre 2 Userform
    Bonjour à tous,

    J'aurais aimé avoir un petit coup de pouce pour créer un code sous VBA.
    J'ai modifié mon fichier pour qu'il soit compréhensible par tous en prenant un base de donnée avec des voitures.

    Le fichier est composé de 2 bases de données. La première regroupe les caractéristiques des véhicules en fonction de leur marque et de leur modèle. L'userform 1 est alimenté par cette première base de donnée. On sélectionne la marque, le modèle dans les combobox puis les textbox sont complétées par les infos de la ligne concernée en fonction du choix marque/modèle.

    Jusque là tout va bien. Ma seconde base de donnée ressemble à la 1ere. Elle est composée des marques, modeles + les caractéristiques du véhicules mais un 3ème filtre peut être fait en fonction du type de motorisation.
    Je m'explique. L'userform2 est à la suite de l'userform1. Quand on a fait nos choix marque/modele dans l'userform1, une des textbox (Nombre motorisation), permet de nous envoyer sur l'userform2 via le bouton si elle est composée d'une valeur numérique.
    Si elle est composée d'un "1", pas de choix de motorisation à faire, les textbox se remplissent automatiquement (à partir de la BDD2) par la ligne concernant le choix du modèle et de la marque fait dans l'userform1.
    Par contre si plusieurs choix de motorisations sont possible en fonction du modèle, il faut la choisir dans le menu déroulant (combobox3), le 1er filtre marque/modèle étant déjà fait dans les combobox 1 et 2. Les textox se remplissent alors via la ligne concernée de la BDD2.

    Ensuite, sur l'userfom 1, il y a aussi un bouton qui permet d'ouvrir le dossier de la marque concernée sur le PC à partir du choix de la marque dans la combobox 1.
    Dans la base de donnée, un lien du style "C://mes documents/Audi" est mit pour chaque marque dans une colonne.
    Le bouton doit aller chercher la marque mise dans la combobox 1, ensuite le lien correspondant dans la BDD.

    Cela fait beaucoup de choses mais je suis bloqué depuis quelques semaines dessus.
    En espérant avoir été assez clair dans mes explications, le fichier est en PJ
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    Bonjour,

    Je pense que pour résoudre ton problème il faut que tu déclare les valeurs de tes combobox en public pour pouvoir les utiliser dans tes deux userforms.

    C'est à dire :
    Tu créé un module standard

    et en haut tu rentre ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Marque as string
    Public Modele as string
    Ensuite dans ton userform1 quand tu clique sur "Valider" tu dis que Marque = combobox1.value et que Modele=combobox2.value.

    Et grâce à cela tu pourra remplir ta combobox3 comme tu a rempli ta combobox2 en récupérant les valeurs de Marque et Modele sauf que ton code tu le met dans userform_initialize.

    J'espère avoir été clair.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Bonjour gaet76,

    Merci de t'être penché sur le sujet. J'ai bien créé mon module avec le code que tu as pu me transmettre.
    J'ai aussi rentré dans le Command_Button1 de l'userform1 :
    Marque = combobox1.value
    Modele=combobox2.value.

    Par contre je reste bloqué pour la suite. Je ne vois pas ce qu'il faut rentrer dans UserForm_Initialize() pour l'UserForm2 ainsi que dans le Combobx3..
    Car il faut qu'une fois que la Marque et le Modele sont choisi dans les combobox 1 et 2 ma combobox3 se remplisse par les catégorie de motorisation correspondant aux choix fait dans les combobox 1 et 2 et ainsi afficher les caractéristiques dans les textox

  4. #4
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    Loglana,

    Petite rectification après avoir manip avec ton fichier :

    Déclaration des variables Modele et Motorisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Modele as string, Motorisation as long
    C'est peu un comme ce que j'avais dis avant sauf qu’enfaîte la marque ne nous intéresse pas alors que le nombre de motorisation oui

    Ensuite dans le Command_Button1 de l'userform1 :

    Modele = ComboBox2.Value
    Motorisation = TextBox12.Value

    Puis dans le Initialize de l'userform 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim LastLig As Long, MonDico As Object, C As Range, RM As Variant
    LastLig = Feuil2.Range("A" & Rows.Count).End(xlUp).Row
        Set MonDico = CreateObject("Scripting.Dictionary")
     
    If Motorisation > 1 Then
    For Each C In Feuil2.Range("B2:A" & LastLig)
         If C = Modele Then MonDico(C.Offset(, 1).Value) = "" 
      Next C
      Me.ComboBox3.List = MonDico.keys
    Else
    Set RM = Feuil2.Range("B2:B" & LastLig).Find(Modele)
     
    Me.ComboBox3.Value = Feuil2.Cells(RM.Row, 3)
    End If
    Il ne te restera plus qu'a remplir les autres Textbox en fonction du changement de la combobox3

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    J'ai complété toutes les parties avec les codes que tu as pu m'envoyer en les adaptant (changement du nom de la feuille + remplacement de Textbox12 par Textbox9).
    Cependant un nouveau soucis apparait. Le bouton qui est censé ouvrir l'userform2 ne fonctionne plus (erreur d'exécution '424'), je ne vois pas pourquoi.
    Je te laisse le fichier mis à jour avec tes codes en pièce jointe. Je pense que tu mettras nettement moins de temps que moi à trouver la solution
    Merci d'avance
    Fichiers attachés Fichiers attachés

  6. #6
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    C'est le nom de ta feuille qui ne vas pas. (En utilisant F8 tu fais une avance pas à pas et tu peux voir sur quelle ligne ça bloque)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LastLig = bdd2.Range("A" & Rows.Count).End(xlUp).Row
    LastLig = Feuil2.Range("A" & Rows.Count).End(xlUp).Row ou LastLig = sheets("bdd2").Range("A" & Rows.Count).End(xlUp).Row
    A appliquer sur les lignes en dessous également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each C In bdd2.Range("B2:A" & LastLig)
    Set RM = bdd2.Range("B2:B" & LastLig).Find(Modele)
    Je te met ci joint ton fichier que j'avais fini de compléter de mon coté
    Fichiers attachés Fichiers attachés

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Super, je me suis servi de ce que tu as pu me fournir en code pour compléter mon fichier tout en l'adaptant et tout fonctionne parfaitement.

    Il ne me reste plus qu'à trouver la solution pour mon 3ème bouton sur l'userform1 qui sert à ouvrir un fichier Windows par le biais d'un lien mis dans la base de donnée.
    Concrètement c'est comme si chaque marque avait un dossier dans le disque "C" et qu'en fonction du choix de la marque fait dans la Combobox1, le bouton nous ouvre le fichier de la marque concernée à partir du lien rentré dans la base de donnée.

    Aurais-tu une petite idée sur le sujet ?

  8. #8
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    Je pense que tu peux faire quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim rep as string
     
    Rep = "C:\mes documents\" & combobox1.value & "\"
     
    if dir(rep,vbdirectory)<> "" then
    Application.dialogs(xlDialogOpen).show Rep
    Else
    Msgbox "Chemin introuvable"
    End if
    Par contre je sais pas trop ce que tu veux ouvrir dans ce dossier mais si tu fait comme ca ca t'ouvrira un fichier excel meme si le document n'est pas un excel.

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    J'ai essayé d'incorporer ton code à mon fichier tout en le modifiant pour l'adapter, mais cela n'a pas l'air de fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton3_Click()
    Dim rep As String
    rep = "C:\Documents\" & ComboBox1.Value & "\" 'Dans Mes documents j'ai un fichier pour chaque marque nommé de la même manière que dans ma Combobox1
    If Dir(rep, vbDirectory) <> "" Then
    Application.Dialogs(xlDialogOpen).Show rep
    Else
    MsgBox "Chemin introuvable"
    End If

  10. #10
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    C'est un fichier excel que tu as dans "Mes documents"?

    si c'est le cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton3_Click()
    Dim rep As String
    rep = "C:\Documents\" & ComboBox1.Value & ".xls" 'ou autre extension selon ton fichier
    If Dir(rep, vbDirectory) <> "" Then
    Application.Dialogs(xlDialogOpen).Show rep
    Else
    MsgBox "Chemin introuvable"
    End If

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Non, c'est juste un dossier avec plusieurs fichiers excel à l'intérieur.
    Mais pour l'instant je n'arrive pas à configurer le code pour que cela m'ouvre un des fichiers en fonction de la valeur de la combobox. Je tombe toujours sur le message "Chemin introuvable".
    Parce qu'en fait le début du lien sera toujours le même, du style :
    - C://Mes documents/Voiture/Audi
    - C://Mes documents/Voiture/Citroen
    - ...

  12. #12
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    Ah ok.

    Alors si tu veux ouvrir le dossier et choisir toi même le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton3_Click()
    Dim Rep As String
    Rep = "C:\Mes documents\Voiture\" 
    If Dir(rep, vbDirectory) <> "" Then
    Application.Dialogs(xlDialogOpen).Show Rep ' et la tu va choisir ton fichier selon ta marque
    Else
    MsgBox "Chemin introuvable"
    End If
    End sub
    Ou sinon Pour ouvrir ton fichier directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton3_Click()
    Dim Fichier As String
    Fichier= "C:\Mes documents\Voiture\" & ComboBox1.value & ".xls" ' mettre le bon format (xls,xlm,xlsx,...)
    If Dir(Fichier, vbDirectory) <> "" Then
    workbooks.Open(Fichier)
    Else
    MsgBox "Fichier introuvable"
    End If
    End sub

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Ok, c'est bon. J'ai réussi à faire exactement ce que je voulais en faisant un mélange des 2 codes.
    Cependant une fois le fichier excel ouvert il m'est impossible de le modifier et même de le fermer !
    Il y a t-il une solution pour pouvoir modifier/enregistrer et fermer le fichier excel ouvert via le bouton ? On dirait que c'est juste de la visualisation du fichier ouvert. Par contre une fois l'userform arrêté, le fichier reste ouvert et là on peut en faire ce que l'on veut.
    Je pense que cela vient du code "Show" qui ne fait que "montrer le fichier mais qui ne le rend pas modifiable

    Pour info voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton3_Click()
    Dim Fichier As String
    Fichier = "D:\Documents\Voiture\" & ComboBox1.Value ' mettre le bon format (xls,xlm,xlsx,...)
    If Dir(Fichier, vbDirectory) <> "" Then
    Application.Dialogs(xlDialogOpen).Show Fichier
    Else
    MsgBox "Fichier introuvable"
    End If
    End Sub

  14. #14
    Membre actif
    Homme Profil pro
    Responsable des études
    Inscrit en
    Décembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 51
    Par défaut
    Loglana,

    Je pense que dans ton code il faut que tu ferme tous tes userforms qui sont actifs, vu qu'ils sont modal, soit avant soit après ta ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Dialogs(xlDialogOpen).Show Fichier

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2016
    Messages : 9
    Par défaut
    Bonjour gaet76

    Merci pour tout, j'ai enfin réussi à finaliser ce petit projet, sans ton aide j'aurais été incapable d'y arriver seul.

    Il ne me reste plus qu'a bricoler quelques petits trucs sur le dimensionnement de l'userform en fonction de la taille de l'écran mais j'ai vu pas mal de sujet traîner sur les forums, je devrais m'en sortir je pense.

    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liens entre 2 cellules d'une userform
    Par Hollowman641 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/03/2009, 22h41
  2. Liens entre code feuille et Userform.
    Par stéphane75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/07/2007, 17h00
  3. [VBA Excel] Lien entre userforms
    Par violette_china dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2006, 03h21
  4. [VBA-E] liens entre les userform et reduction des lignes de programme
    Par jamelie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/05/2006, 13h43
  5. [debutant][servlet]lien entre formulaire et servlet
    Par omega dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/03/2004, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo