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 :

Comment faire pour que les éléments de ma combobox soient ceux de la plage du classeur fermé [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut Comment faire pour que les éléments de ma combobox soient ceux de la plage du classeur fermé
    Salut le forum

    J'ai un classeur fermé initulé "MODELE_VISA_zb" qui se trouve dans le dossier "VISA_CHEQUE" du répertoire "Z:".
    J'ai un autre classeur qui est actif. Ce classeur comporte un usf comportant une combobox.
    Les éléments de ma combobox devront être ceux du classeur fermé et plus précisément la plage BASE_DE_DONNEES!A2:A).
    Voici le chemin d'accès du classeur fermé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Z:\VISA_CHEQUE\MODELE_VISA_zb.xlsx"
    Le code ci-dessous permet de se connecter au classeur fermé mais la suite j'y arrive pas.
    Je salut au passage l'auteur du code (rdurupt).
    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
    30
    31
    32
    33
    34
    35
    Public Cnx As Object, Cnx1 As Object
    Public Const Feuille = "USER_LIST$"
    Public Const Feuille1 = "BASE_DE_DONNEES$"
    Public Const Fichier = "Z:\VISA_CHEQUE\MODELE_VISA_zb.xlsx"
    Dim strsQL As String
    Sub RequetAjout()
     
    OpenConnexion Fichier
    strsQL = "insert into [" & Feuille & "] ([USER_CODE],[CODE_EXPL],[NOM_EXPLOITANT],[CONTACTS],[ADRESSE_MAIL_EXPLOITANT],[ADRESSE_MAIL_DA]) "
    strsQL = strsQL & "Values ('USER_CODE','CODE_EXPL','NOM_EXPLOITANT','CONTACTS','ADRESSE_MAIL_EXPLOITANT','ADRESSE_MAIL_DA');"
     
    strsQL = "insert into [" & Feuille & "] ([USER_CODE],[CODE_EXPL],[NOM_EXPLOITANT],[CONTACTS],[ADRESSE_MAIL_EXPLOITANT],[ADRESSE_MAIL_DA]) "
    strsQL = strsQL & "Values ('textbox1.value','textbox2.value','textbox3.value','textbox4.value','textbox5.value'textbox6.value');"
    Cnx.Execute strsQL
    Set Cnx = Nothing
    End Sub
    Sub RequeteMaj()
    OpenConnexion Fichier
    Set requete = CreateObject("ADODB.recordset")
    strsQL = "Update  [" & Feuille & "] set [USER_CODE]='toto'  where  [USER_CODE]='textbox1.value';"
    Cnx.Execute strsQL
    Cnx.Close
    End Sub
    Sub OpenConnexion(Fichier)
    Set Cnx = CreateObject("ADODB.Connection")
     
    With Cnx
     .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
     
    End With
     
    End Sub
    Merci pour vos contributions

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste, adapter là où c'est indiqué. La plage ne doit pas être indiquée par un nom mais par une adresse de range :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    Private Sub ConnectCLasseur(ConnectCL As Object, _
                                Fichier As String, _
                                Optional Rs)
     
        Set ConnectCL = CreateObject("ADODB.Connection")
        If Not IsMissing(Rs) Then
            Set Rs = CreateObject("ADODB.Recordset")
        End If
     
        ConnectCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & Fichier & ";" & _
                  "Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
        RecupValeurs
     
    End Sub
     
     
    Sub RecupValeurs()
     
        Dim ConnectCL As Object
        Dim Rs As Object
        Dim Champ As Object
        Dim Fichier As String
        Dim NomFeuille As String
        Dim plage As String
        Dim Tableau()
        Dim I As Integer
        Dim J As Integer
     
        'chemin du classeur, à adapter...
        Fichier = "F:\Classeur Combo.xls"
     
        'feuille où s'effectuera la récup, à adapter...
        NomFeuille = "Feuil1"
     
        'plage ou s'effectuera la récup, pour une cellule
        'écrire de la façon suivante : "A1:A1", à adapter...
        plage = "A1:A10" '<-- ici, pas de nom mais une plage !
     
        'connecxion
        ConnectCLasseur ConnectCL, Fichier, Rs
     
        With Rs
     
            .CursorType = 1
            .LockType = 3
            .Open "SELECT * FROM `" & NomFeuille & "$" & _
            plage & "` ", ConnectCL
     
            'mets les valeurs dans un tableau (plus rapide)
            ReDim Tableau( _
                    1 To .RecordCount, _
                    1 To .Fields.Count)
     
            .MoveFirst
     
            Do While Not .EOF
     
                I = I + 1
     
                For Each Champ In .Fields
     
                    J = J + 1
     
                    Tableau(I, J) = Champ.Value
     
                Next
     
                J = 0
     
                .MoveNext
     
            Loop
     
        End With
     
        ConnectCL.Close
     
        'récupération des valeurs stockées dans le tableau
        For I = 1 To UBound(Tableau, 1)
     
            'adapter le nom du combobox...
            Me.ComboBox1.AddItem Tableau(I, 1)
     
        Next I
     
    End Sub
    Hervé.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Comme cette méthode peut s'avérer utile pour plusieurs combobox et/ou UserForm ; nous allons la décrire dans le même module ou nous avons décrit le processus de connexion.
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ReseigneListe(Table As String, Champ As String, Lst As ComboBox)
    Dim sql As String
    Dim Rs As Object
    sql = "select Distinct Frm." & Champ & " from [" & Table & "] as frm order by frm." & Champ & ";"
    Set Rs = CreateObject("ADODB.RECORDSET")
    Rs.Open sql, Cnx
    If Rs.EOF = false Then
        Lst.List =Rs.getrows
    End If
    Rs.Close
    Set Rs = Nothing
    End Sub
    Code UserForm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Initialize()
    OpenConnexion Fichier
    ReseigneListe Feuille, "USER_CODE", Me.ComboBox1
    Cnx.Close
    Set Cnx = Nothing
    End Sub
    Dernière modification par Invité ; 08/09/2014 à 09h17.

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Salut Theze et rdurupt

    Merci pour vos codes.
    Theze: j'ai essayé de tester votre code mais il y'a une erreur ici "ConectCLasseur" avec le message suivant :"Sub ou Fonction non défini".
    Rdurupt:Il n'ya qu'une seule valeur qui s'affiche dans la combobox et non les éléments de la plage concernés.
    Pouvez-vous revoir svp?
    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ReseigneListe(Table As String, Champ As String, Lst As ComboBox)
    Dim sql As String
    Dim Rs As Object
    sql = "select Distinct Frm.* from [" & Table & "] as frm order by frm." & Champ & ";"
    Set Rs = CreateObject("ADODB.RECORDSET")
    Rs.Open sql, Cnx
    If Rs.EOF = false Then
        Lst.List =Rs.getrows
    End If
    Rs.Close
    Set Rs = Nothing
    End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci pour la nouvelle solution.
    Je pense que ca commence à venir.
    Au lieu que la liste de la combobox1 soit les éléments de la colonne B avec pour nom de champ "NUM_CLIENT", il affiche les éléments de la ligne 3 comme élément de ma combobox. Ce qui n'est pas bon.
    Pouvez-vous faire en sorte que ce soit les éléments de la colonne B (commençant par B2:B)

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    j'ai essayé de tester votre code mais il y'a une erreur ici "ConectCLasseur" avec le message suivant :"Sub ou Fonction non défini".
    Oui mais dans ce cas, il faut faire attention à l'orthographe, c'est "ConnectCLasseur" et non "ConectCLasseur" il est passé où le second "n" ?

    Hervé.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    plus-qu’une légère absence, c'est de la sénilité!
    Code UserForm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
    OpenConnexion Fichier
    ReseigneListe Feuille, Me.ComboBox1
    Cnx.Close
    Set Cnx = Nothing
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub ReseigneListe(Table As String, Lst As ComboBox)
    Dim sql As String
    Dim Rs As Object
    sql = "select Distinct Frm.* from [" & Table & "] as frm ;"
    Set Rs = CreateObject("ADODB.RECORDSET")
    Rs.Open sql, Cnx
    Lst.Clear
    If Rs.EOF = False Then
        Lst.ColumnCount = Rs.fields.Count
          Lst.BoundColumn = Rs.fields.Count
        Lst.List = Application.WorksheetFunction.Transpose(Rs.getrows)
        End If
    Rs.Close
    Set Rs = Nothing
    End Sub

  9. #9
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Bonjour rdurupt

    Merci pour le feedback.
    Je viens de tester mais il y'a une "erreur d'exécution '13': Incompatibilité de type".
    Cette partie du code dans l'usf est signalée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReseigneListe Feuille, Me.ComboBox1
    J'ai voulu essayé par ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReseigneListe Feuille, "USER_CODE", Me.ComboBox1
    mai toujours la même erreur.
    Merci de revoir svp!

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu as recopyé les 2 sub l'une dans le UserForm l'autre dans Module1?
    Dernière modification par AlainTech ; 13/09/2014 à 11h17. Motif: Suppression de la citation inutile

  11. #11
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Tout à fait. Les codes ont été intégrés au bon endroit (usf et module).

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par capi81 Voir le message
    Tout à fait. Les codes ont été intégrés au bon endroit (usf et module).
    je te remet le fichier pour comparer!
    Fichiers attachés Fichiers attachés

  13. #13
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Je me suis contenté d'apprécié les codes car je n'arrive pas à ouvrir l'usf.
    Mes codes sont conformes.
    Pouvez-vous tester votre solution avec les 2 fichiers que j'avais posté ici :
    http://www.developpez.net/forums/d14...espace-commun/
    Il s'agit des posts de la page 5 et plus précisément le dernier post.

  14. #14
    Invité
    Invité(e)
    Par défaut
    c'est bien avec que j'ai testé
    Fichiers attachés Fichiers attachés
    Dernière modification par AlainTech ; 13/09/2014 à 11h18. Motif: Suppression de la citation inutile

  15. #15
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Effectivement avec vos fichiers joint, les tests sont concluant.
    J'ai essayé de modifier vos fichiers joints (voir fichiers joints)en ajoutant un de mes usf réel.
    J'ai l'impression d'avoir un peu mélangé les choses.
    Je vous laisse apprécier le cas de la combobox liste et après j'aborderai les autres points.
    A cause du débogage lié à cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReseigneListe Feuille1, Me.ComboBox1
    , j'arrive pas à ouvrir l'usf du cas réel.
    Fichiers attachés Fichiers attachés

  16. #16
    Invité
    Invité(e)
    Par défaut
    ton table contient des valeur NUL ce qui est incompatible avec Lst.Liste!

    j'ai corrigé; en plus Public Const Fichier = "C:\GESTION_VISA_CHEQUE\VISA_CHEQUE2.xlsx" qui n'est pas le fichier dans le zip
    Fichiers attachés Fichiers attachés

  17. #17
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci pour les solutions apportées.
    Je viens de tester et je constate que la liste de la combobox prend en compte tous les éléments du tableau.
    Avez-vous testé le bouton "Afficher" et "Valider" pour voir le résultat?
    Bouton "Afficher" :normalement après avoir opéré un choix dans la combobox1, en cliquant sur "Afficher" les différents controls exceptés les 2 derniers controle (Frame1 et textbox20).
    Bouton "Valider": une fois que le valideur aura donné son avis en renseignant la Frame1 (Favorable ou défavorable) et le e=textbox20, en cliquant sur "Valider", les données des textboxs définis devront être copiées sur la feuille "Avis_DGAE".
    Pour le bouton "Afficher" rien ne se produit lorsque je fais mon choix dans la combobox1.
    Idem lorsque je fais "Valider".
    Merci de revoir pour moi svp!

  18. #18
    Invité
    Invité(e)
    Par défaut
    oui j'y avais pensé mais je me suis emmêlé les craillons!

    attention pour l'instant on ne gère pas les format date et numérique je t'invite dans un premier temps à formater tes cellule en text!
    Fichiers attachés Fichiers attachés
    Dernière modification par AlainTech ; 13/09/2014 à 11h19. Motif: Suppression de la citation inutile

  19. #19
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Points : 93
    Points
    93
    Par défaut
    Merci pour votre disponibilité que je ne saurai abuser.
    Les tests sont à 99% concluant mais je constate encore une chose:
    Le bouton "Valider" bien qu'à l'exécution ne signale aucune erreur, je remarque que les données qui devraient être copiées vers la feuille "AVIS_DGAE" ne le sont pas.
    Est-ce le même constat chez vous?
    Merci de voir. De mon côté aussi je cherche à comprendre pourquoi ca ne marche pas comme les autres.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Non j'ai inserré sans problème
    Dernière modification par AlainTech ; 13/09/2014 à 11h20. Motif: Suppression de la citation inutile

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/10/2011, 14h35
  2. Réponses: 3
    Dernier message: 28/12/2010, 08h07
  3. Réponses: 2
    Dernier message: 02/08/2007, 15h44
  4. Réponses: 6
    Dernier message: 16/01/2007, 21h34

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