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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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, 21h41
  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, 16h00
  3. [VBA Excel] Lien entre userforms
    Par violette_china dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2006, 02h21
  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, 12h43
  5. [debutant][servlet]lien entre formulaire et servlet
    Par omega dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/03/2004, 08h54

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