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 :

Remplir une zone de liste Excel avec une requête Access (problème)


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Remplir une zone de liste Excel avec une requête Access (problème)
    Bonjour,

    J'étais déjà venu sur ce forum pour le même problème et je ne retrouve plus mon ancien post.

    Mon problème est énoncé dans l'intitulé du sujet. Sur le site, j'ai vu que ceci devait me permettre de le résoudre :

    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
    Sub FillCombo()
    Dim db As DAO.Database
    Dim rec As DAO.Recordset
    curshname = ActiveSheet.Name
    Set db = DAO.OpenDatabase(ThisWorkbook.Path & "\Membres1.mdb", False, False)
    Set rec = db.OpenRecordset("SELECT NomFamille FROM Membres WHERE DepartOuRegionTravail = 'WA'", DAO.dbOpenSnapshot)
    For Each sh In ActiveWorkbook.Sheets(curshname).Shapes
    If sh.Type = msoFormControl And sh.Name Like "Drop*" Then
    sh.Select
    Do While Not (rec.EOF)
    Selection.AddItem rec.Fields(0).Value
    rec.MoveNext
    Loop
    Exit For
    End If
    Next sh
    rec.Close
    db.Close
    Set rec = Nothing
    Set db = Nothing
    End Sub
    Cependant, j'éprouve quelques difficultées : pour la ligne "curshname = ActiveSheet.Name", VB me dit que la variable "curshname" n'est pas définie. Je décide alors de supprimer cette ligne et de remplacer "curshname" par un nom de feuille pour la suite du programme et j'ai un autre problème : la variable "sh" n'est pas définie. Quelqu'un pourrait-il m'aider si possible en m'expliquant brièvement en quoi consiste les grandes lignes de ce programme afin que je puisse le modifier à ma guise ?

    Merci et bonne journée !

  2. #2
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    ben, déclare tes variables, non?

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    C'est pas comme ça qu'on les déclare ?

    Je débute en Visual Basic et j'ai des programmes ou j'écrivais juste "i = 1" et il ne me posait pas de problème de déclaration de variable.
    Elles se déclarent où et comment les variables ?

  4. #4
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    juste à tout hasard, as-tu dans ton code un "Option Explicit" en début?

    Pour déclarer une variable:

    Dim MaVar As Type

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Asdorve
    juste à tout hasard, as-tu dans ton code un "Option Explicit" en début?
    Oui pourquoi ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    OK je viens de comprendre. Le OPTION Explicit dit qu'il faut déclarer les variables de manière explicite.

    Je l'ai enlevé et maintenant, je n'ai plus d'erreur mais mon programme ne fait rien...

  7. #7
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    le fait d'avoir Option Explicit t'oblige à déclarer toutes tes variables, si tu en oublies une, il te renvoit une erreur comme celle que tu as reçu.

    Si tu déclare correctement ta variable curshname ça devrait rentrer dans l'ordre.

    Essaye (momentanément) de mettre le option Explicit en commentaire et relance .

  8. #8
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par Tontorise
    OK je viens de comprendre. Le OPTION Explicit dit qu'il faut déclarer les variables de manière explicite.

    Je l'ai enlevé et maintenant, je n'ai plus d'erreur mais mon programme ne fait rien...
    fais du pas à pas et regarde ce qu'il se passe

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Citation Envoyé par Tontorise
    OK je viens de comprendre. Le OPTION Explicit dit qu'il faut déclarer les variables de manière explicite.

    Je l'ai enlevé et maintenant, je n'ai plus d'erreur mais mon programme ne fait rien...
    C'est pas une bonne idée de l'enlever. Chaque variable utilisée sans avoir été déclarée est automatiquement du type variant. Ce qui en fait des foure-tout. Il te sera difficile de gérer les erreurs originant d'un type de données incorect. De plus, un type Variant occupe plus d'espace mémoire que tout les autres types de données. Plus qu'un Currency, c'est tout dire! Un type variant peut contenir n'importe quoi (au risque de me répéter - n'ai-je pas déjà dit que c'était un foure-tout?) même un objet. Alors pourquoi occuper tant de mémoire quand on peut n'utiliser que la place nécessaire? En programmation, toujours se rappeler ce principe : Small is beautifull.

  10. #10
    Membre confirmé Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 568
    Points
    568
    Par défaut
    Bonjour,

    J'ajouterais qu'en enlevant le "Option Explicit" non seulement tu gaspille de la mémoire et surtout tu peux te retrouver avec des programmes qui ne font rien...

    Quelques part ce n'est pas toi qui est maitre de ton programme, alors il est logique d'arriver sur des dérives.


    Si j'étais toi je mettrais Option Explicit et déclarerais toutes mes variables de la manière que te l'a conseillé Asdorve plus haut..


    Cordialement

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    OK. Merci pour les renseignements. Je commence à mieux comprendre certaines choses maintenant. Le problème, c'est que j'ai repris le programme trouvé sur le site en y effectuant les modifications comme ci-dessous et je ne comprends pas tout, notamment cette partie la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each sh In ActiveWorkbook.Sheets("temp").Shapes
    If sh.Type = msoFormControl And sh.Name Like "Drop*" Then
    sh.Select
    Do While Not (rec.EOF)
    Selection.AddItem rec.Fields(0).Value
    rec.MoveNext
    De plus, je ne vois pas non plus où on indique au programme l'endroit ou il doit créer la liste déroulante (feuille et cellule).

    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
    Sub FillCombo()
     
    Dim sh As Object
    Dim db As DAO.Database
    Dim rec As DAO.Recordset
    Set db = DAO.OpenDatabase(ThisWorkbook.Path & "\generosite.mdb", False, False)
    Set rec = db.OpenRecordset("SELECT OD FROM OD", DAO.dbOpenSnapshot)
    For Each sh In ActiveWorkbook.Sheets("temp").Shapes
    If sh.Type = msoFormControl And sh.Name Like "Drop*" Then
    sh.Select
    Do While Not (rec.EOF)
    Selection.AddItem rec.Fields(0).Value
    rec.MoveNext
    Loop
    Exit For
    End If
    Next sh
    rec.Close
    db.Close
    Set rec = Nothing
    Set db = Nothing
     
    End Sub

  12. #12
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par zazaraignée
    C'est pas une bonne idée de l'enlever.
    c'est pour celà que j'ai dit:
    Essaye (momentanément) de mettre le option Explicit en commentaire et relance .

  13. #13
    Membre confirmé Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 568
    Points
    568
    Par défaut
    C'est une idée momentanément bonne alors

  14. #14
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Tontorise : C'est bien que tu aies trouvé les boutons de mise en forme du texte dans l'édition de tes message. Mais le bouton pour mettre du code en évidence c'est celui-ci : . Essaie de l'utiliser la prochaine fois.

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par zazaraignée
    Tontorise : C'est bien que tu aies trouvé les boutons de mise en forme du texte dans l'édition de tes message. Mais le bouton pour mettre du code en évidence c'est celui-ci : . Essaie de l'utiliser la prochaine fois.
    OK je ferais attention maintenant

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Comme je n'arrive pas à faire marcher ce programme, je me suis dit que le moyen le plus simple serait sûrement de récupérer les lignes que j'ai besoin avec une requête SQL et de les copier sur une feuille excel (ce que je sais faire) puis de créer une zone de liste avec les données récupérées dans la feuille. En sorte, ça reviendrait à faire la même opération en 2 étapes.
    Quelqu'un pourrait-il me dire comment faire la deuxième étape ? Le nombre de ligne de données récupérées est inconnu (il se situera autour de 2100 lignes donc ce ne sera pas trop lourd).

  17. #17
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Citation Envoyé par Tontorise
    De plus, je ne vois pas non plus où on indique au programme l'endroit ou il doit créer la liste déroulante (feuille et cellule).
    Sur une page (Form) tu prends, dans la boite des composants, un contrôle ListBox, tu le poses sur Form et tu la renomes Selection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While Not (rec.EOF)
    Selection.AddItem rec.Fields(0).Value
    rec.MoveNext
    Loop
    A mon avis le code que tu as posé semble bon (avec les correctifs signalés).

  18. #18
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Merci pour les informations. Cependant, le programme n'affiche plus d'erreur mais il ne fait rien. J'ai essayé d'ajouter "selection.show" à la fin du petit programme pour qu'il affiche la liste mais ça ne change rien. C'est sûrement un truc con qu'il faut faire mais je m'y connaît pas encore en Visual Basic.

Discussions similaires

  1. Remplir une zone de liste Excel par une requête Access
    Par cafeine dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2011, 10h57
  2. Réponses: 2
    Dernier message: 20/11/2009, 11h37
  3. Remplir une zone de liste Excel par une requête Access
    Par Bourbaky dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/10/2007, 15h00
  4. Réponses: 1
    Dernier message: 09/10/2007, 14h17
  5. [Source][VBA-E] Remplir une zone de liste Excel par une requête Access
    Par cafeine dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/01/2007, 13h26

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