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 :

Compléter des textbox à partir d'une base de donnée et en fonction d'un choix fait dans une combobox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    DUT GMP par apprentissage
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : DUT GMP par apprentissage
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Par défaut Compléter des textbox à partir d'une base de donnée et en fonction d'un choix fait dans une combobox
    Bonjour à tous !

    Je suis étudiante en apprentissage et dans mon entreprise on m'a demandé de faire un logiciel VBA pour simplifier le travail des personnes qui contrôlent des pièces.
    Mon problème parait simple et pourtant, je n'ai pas réussi à trouver des informations qui convenaient pour le résoudre. J'ai donc fini par faire quelque chose qui fonctionne mais ça ne me parait pas très correct. J'aurai donc besoin que vous me dites ce que vous en pensez et s'il y a une meilleure façon de le faire qui serait beaucoup plus "propre".

    Alors voilà, ce que j'ai essayé de faire se résume en quelques étapes :
    1. Le contrôleur choisit la pièce sur laquelle il doit faire le contrôle à l'aide de la combobox de la fenêtre visible ci-dessous.
    2. Les champs "Référence", "Matière, État" et "Nom du classeur" se remplissent automatiquement en fonction de ce qui a été choisi.

    Nom : Fenetre.png
Affichages : 178
Taille : 35,3 Ko

    Pour que les champs concernés se remplissent automatiquement, je fais intervenir une basse de donnée qui se présente comme suit et est un autre classeur qui reste fermé.

    Nom : BDD.PNG
Affichages : 177
Taille : 9,5 Ko

    J'ai donc écrit le code suivant (à partir des quelques infos trouvées) qui fonctionne mais qui me parait peu correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Private Sub ComboBoxInfo1_Change()
     
        Dim n As Integer
        Dim chemin As String
        Dim a, b, c As String
     
        chemin = "MonChemin\BaseDeDonnee.xlsx"
     
        n = ComboBoxInfo1.ListIndex
     
        If Not ComboBoxInfo1.Text = "" Then
            With Workbooks.Open(chemin)
                a = Sheets(1).Range("B" & n + 2).Value
                b = Sheets(1).Range("C" & n + 2).Value
                c = Sheets(1).Range("D" & n + 2).Value
                ActiveWorkbook.Close
            End With
     
            FenetreInfosEnTete.TextBoxInfo2.Text = a
            FenetreInfosEnTete.TextBoxInfo4.Text = b
            FenetreInfosEnTete.TextBoxInfo8.Text = c
     
        End If
     
    End Sub
    Le "n + 2" est nécessaire pour que je puisse récupérer les bonnes infos sur les bonnes lignes de ma base de donnée.

    Merci d'avance pour vos réponse et votre aide.

  2. #2
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    Bonjour Oriakin,

    dans ton code, tu reprends l’incrémentation de ComboBoxInfo1 pour en déduire les valeurs recherchées, cela fonctionne mais jusqu'à quand?
    De plus tu utilises "With Workbooks.Open(chemin)" sans y faire référence dans la suite.

    Je te propose de faire une recherche de ta valeur à l'aide de "find"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set RgSearch = wbBaseDeDonnee.Sheets(1).Range("A2:A" & DerniereLigne).Find(ComboBoxInfo1.Value)
    et de retourner le ligne de ta recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Sheets(1).Range("B" & RgSearch.Row).Value
    Ce qui pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub ComboBoxInfo1_Change()
     
    Dim chemin As String
    Dim a, b, c As String
    Dim wbBaseDeDonnee As Workbook
    Dim RgSearch As Range
    Dim DerniereLigne As Long
     
        chemin = "MonChemin\BaseDeDonnee.xlsx"
     
        Set wbBaseDeDonnee = Workbooks.Open(chemin)
        DerniereLigne = wbBaseDeDonnee.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
        Set RgSearch = wbBaseDeDonnee.Sheets(1).Range("A2:A" & DerniereLigne).Find(ComboBoxInfo1.Value)
     
     
        If Not (RgSearch Is Nothing) Then
            With wbBaseDeDonnee
                a = .Sheets(1).Range("B" & RgSearch.Row).Value 'ici le point de .sheets fait référence à wbBaseDeDonnee 
                b = .Sheets(1).Range("C" & RgSearch.Row).Value
                c = .Sheets(1).Range("D" & RgSearch.Row).Value
            End With
     
            FenetreInfosEnTete.TextBoxInfo2.text = a
            FenetreInfosEnTete.TextBoxInfo4.text = b
            FenetreInfosEnTete.TextBoxInfo8.text = c
     
        End If
        wbBaseDeDonnee.Close
    End Sub

  3. #3
    Candidat au Club
    Femme Profil pro
    DUT GMP par apprentissage
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : DUT GMP par apprentissage
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Par défaut
    Bonjour lucasgaetan et merci pour ta réponse.

    Effectivement, je n'avais pas pensé à prendre le problème dans ce sens. Faire une recherche par valeur et non par l'incrémentation de la combobox est effectivement plus judicieux. Comme ça, si je dois rajouter une autre pièce par la suite et que je ne la rentre pas à la même place dans la combobox et dans la base de donnée, le problème est géré. De plus, je vais pouvoir ranger les désignations des pièces par ordre alphabétique, ce qui permettra aux contrôleurs de trouver plus facilement ce qu'ils veulent.

    Le code me parait déjà beaucoup mieux ! Merci
    Je vais quand même laisser le post en "non résolu" quelques temps pour voir si d'autres commentaires peuvent être apportés.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/02/2015, 11h46
  2. [MySQL] enregistrer des info dans une base de données a partir d'un site internet HTML
    Par coralieD dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 14/01/2015, 16h23
  3. Réponses: 2
    Dernier message: 24/05/2011, 04h18
  4. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 11h52

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