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 :

Pb Lecture connexion


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Par défaut Pb Lecture connexion
    Bonjour,
    J'ai un pb lorsque j'essais de lire une collection de commune pour charger une combo.
    Il boucle sur le dernier élement et je ne vois pas trop pourquoi.

    -- Classe Commune
    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
     
    Private commune As String
    Private codePostal As String
    Private departementName As String
    Private departementCode As String
     
    Public Property Get communeOut() As String
    communeOut = commune
    End Property
     
    Public Property Let communeIn(communeIn As String)
    commune = communeIn
    End Property
     
    Public Property Get codePostalOut() As String
    codePostalOut = codePostal
    End Property
     
    Public Property Let codePostalIn(codePostalIn As String)
    codePostal = codePostalIn
    End Property
     
    Public Property Get departementNameOut() As String
    departementNameOut = departementName
    End Property
     
    Public Property Let departementNameIn(departementNameIn As String)
    departementName = departementNameIn
    End Property
     
    Public Property Get departementCodeOut() As String
    departementCodeOut = departementCode
    End Property
     
    Public Property Let departementCodeIn(departementCodeIn As String)
    departementCode = departementCodeIn
    End Property
    -- Méthode de chargement
    Je souhaites charger une collection de classe commune en clef (commune name + code postal)
    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
     
    Public Function chargeCommuneListe()
      Set chargeCommuneListe = New Collection
     
      Dim texte_Sql As String
      Dim Cn As ADODB.Connection
      Dim Cd As ADODB.Command
      Dim Rst As ADODB.Recordset
     
        'Les données à insérer:
     
        Set Cn = New ADODB.Connection
        Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & classeurExcelCodePostal & ";" & _
            "Extended Properties=""Excel 8.0;HDR=No;"";"
     
       texte_Sql = "SELECT * FROM [" & feuilleExcelCodePostal & "$" & "]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_Sql)
            Do Until Rst.EOF
              If Rst(0).Value <> " " Then
              Dim commune As New commune
     
              Dim departementCode As String
              departementCode = Rst(1).Value
     
              With commune
              .communeIn = Rst(0).Value
              .codePostalIn = Rst(1).Value
              .departementNameIn = Rst(2).Value
              .departementCodeIn = Mid(departementCode, 1, 2)
              End With
                  chargeCommuneListe.Add commune, commune.communeOut & commune.codePostalOut
              End If
              Rst.MoveNext
            Loop
     
    Rst.Close
    Cn.Close
    Set Cn = Nothing
    End Function
    -- Méthode de Lecture : pour charger ma combo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub loadComboBox()
      Dim i As Long
      feuilleExcelCombo = "Client"
      comboBoxName = "comboCommuneDomicile"
     
    For i = 1 To communeListe.Count
        Set commune = communeListe.Item(i)
        With ActiveWorkbook.Sheets(feuilleExcelCombo).OLEObjects(comboBoxName).Object
              .AddItem commune.communeOut
        End With
    Next i
     
    End Sub
    Merci pour votre aide

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Envoyé par koolWak:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private commune As String
     
    ...
     
    Dim commune As New commune
    ... Mauvaise idée de nommer une variable du même nom qu'une classe et/ou un membre du même nom que sa classe!!!

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Par défaut
    Merci pour ta remarque.
    C'est vrai que c'est plus clair, mais cela n'a pas résolu mon souci

    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
     
    Private communeName As String
     
    Public Property Get communeNameOut() As String
    communeNameOut = communeName
    End Property
     
    Public Property Let communeNameIn(communeNameIn As String)
    communeName = communeNameIn
    End Property
     
    ...
              With commune
              .communeNameIn = Rst(0).Value
              .codePostalIn = Rst(1).Value
              .departementNameIn = Rst(2).Value
              .departementCodeIn = Mid(departementCode, 1, 2)
              End With
                  chargeCommuneListe.Add commune, commune.communeNameOut & commune.codePostalOut
     
    .....
     
    Sub loadComboBox()
      Dim i As Long
      feuilleExcelCombo = "Client"
      comboBoxName = "comboCommuneDomicile"
     
    For i = 1 To communeListe.Count
        Set commune = communeListe.Item(i)
        With ActiveWorkbook.Sheets(feuilleExcelCombo).OLEObjects(comboBoxName).Object
              .AddItem commune.communeNameOut
        End With
    Next i
     
    End Sub

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Je ne veux pas paraitre trop pointilleux mais tu devrais donner des noms ayant un préfixe ou suffixe du genre 'Cls' ou 'Classe' aux définitions de classes. Comme ça, tu pourrais instancier une variable comme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim Commune as New CummuneClasse
    ... sans ambiguité pour le compilateur et toi et/ou d'autres programmeurs.

    Pour ce qui est du problème de lecture dans la collection, je vois que tu déclare une collection ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set chargeCommuneListe = New Collection
    ... et ensuite tu l'utilises comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chargeCommuneListe.Add commune, commune.communeNameOut & commune.codePostalOut
    et, par la suite, tu sembles l'utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To communeListe.Count
        Set commune = communeListe.Item(i)
        ...
    Y a-t-il une raison de nommer la liste différemment? Y a-t-il deux Collections différentes?


    J'assume ici que tu as une variable globale pour cette collection...

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Par défaut
    Merci Singular pour tes conseils. Débutant en programmation VBA, j'ai encore des progrès à faire.
    Je vais te résumer éxactement ce que je veux faire peut être auras tu une meilleure idée.
    Ce que je souhaitais faire était de déporter toutes mes définitions de classe et leur chargement dans une macro complémentaire. Et ensuite que mes autres classeurs utilisent ces objets standards.

    Dans ma macro standard, il y a avait donc :
    - ma classe commune
    - une variable Globale communeliste
    intialisée par set communeliste = chargeCommuneListe
    avec
    Set chargeCommuneListe = New Collection... et ensuite tu l'utilises comme chargeCommuneListe.Add commune, commune.communeNameOut & commune.codePostalOut

    Ensuite dans mon classeur (d'application), je souhaitais utiliser ma variable globale pour alimenter des comboBox. Je sais que la ce n'était pas terrible, car on lit déjà en boucle une 1ère pour le chargement de la liste puis une 2ème de l'alimentation de la combo.
    Je voulais vraiment séparer l'alimentation de la liste du chargement des combo pour pouvoir facilement rajouter des combo sans modifier le chargement. Peut être il y a t'il un moyen de charger une combo en bloc, sans lire toute la collection. Mais j'ai cherché, et je n'ai pas trouvé. Ou passer par une combo "générique" qui serait alimenter en même temps que la liste. Puis, cette combo serait dupliquée ...
    J'espères avoir été clair. Merci pour ton aide

  6. #6
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Par défaut
    Bonjour,
    J'ai trouvé la solution à mon problême. Le fait que la liste contenait toujours le dernier élément était du à un pb de chargement de ma collection

    Avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Do Until Rst.EOF
              If Rst(0).Value <> " " Then
              Dim commune As New commune
    Correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              Dim commune As  commune
            Do Until Rst.EOF
              If Rst(0).Value <> " " Then
    Dim commune As commune

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

Discussions similaires

  1. Connexion avortée - Erreur de lecture des paquets reçus
    Par Zacland dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/01/2008, 16h30
  2. Hql : Lecture d'un BLOB : Connexion interrompue !
    Par 17mounir dans le forum Hibernate
    Réponses: 3
    Dernier message: 12/09/2007, 17h42
  3. Ecriture/ lecture fichier INI pour connexion base de données
    Par lyraaa dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/06/2007, 20h37
  4. [firebird] Connexion impossible en lecture seule
    Par severine dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2003, 15h35

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