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

VBA Access Discussion :

Probleme de lecture des valeurs d'une requete paramétrée récupérée dans un tableau


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Gestion Lieu Culturel
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Gestion Lieu Culturel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Probleme de lecture des valeurs d'une requete paramétrée récupérée dans un tableau
    Bonjour,

    Tout d'abord un grand merci pour toutes ces contribution dans votre site et toutes c'est infos qui m'ont permis jusqu'à présent d'avancer énormément dans mon projet.

    Voici mon problème et là malgré plein de recherches je sèche complétement :

    Pour améliorer la rapidité d’exécution de mon code je cherche à récupérer les valeurs d'une table liée via une requête paramétrée via un querydef, comme conseillé dans beaucoup de post mais quand je récupéré les champs dans un tableau, le tableau est bien créé avec 9 valeurs mais impossible de lire chaque valeur, une erreur est renvoyé err 9 (l'indice n'appartient pas à la sélection).

    Voici mon code :

    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
    Sub test()
     
    Dim D As Date
    Dim Tb() As Variant
    Dim i As Integer
     
     
    D = CDate("2 / 9 / 2020")
     
    Tb = EstEvent1(D)
     
    If UBound(Tb, 1) <> 0 Then
    For i = 0 To UBound(Tb, 1)
        MsgBox Tb(1)                            <------------------ Err : 9
    Next
    End If
     
    End Sub
    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
    Public Function EstEvent1(DateEvent As Date) As Variant()
     
    Dim Rq As dao.QueryDef
    Dim rec As dao.Recordset
    Dim i As Integer
    Dim Ev() As Variant
    Dim c As Variant
     
     
    Set Rq = CurrentDb.QueryDefs("R_EventPlanning")
    Rq.Parameters("Date") = DateEvent
    Set rec = Rq.OpenRecordset()
    i = rec.Fields.Count
    If rec.Fields.Count <> 0 Then
         Ev() = rec.GetRows
    End If
     
    EstEvent1 = Ev
     
    rec.Close: Set rec = Nothing
    Set Rq = Nothing
     
    End Function

    Désolé pour la mise en page mais je n'ai pas trouvé comment mettre mon code dans cadre avec les N° de ligne comme souvent présenté

    Merci pour votre aide je ne trouve pas mon erreur.

    Cordialement

    Antonin

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,

    D'abord créer ton tableau tb()

    déclarer tb() au niveau du module
    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
    Option explicit
    Dim Tb() as variant()
    
    private sub Fill_Event1(DateEvent As Date)
    ' remplissage de tb()
    Dim Rq As dao.QueryDef
    Dim rec As dao.Recordset
    
    Set Rq = CurrentDb.QueryDefs("R_EventPlanning")
    ' nommer autrement que DATE (par ex DATE1) le parametre car DATE est une fonction vba et donc un mot réservé
    Rq.Parameters("DATE1") = DateEvent
    Set rec = Rq.OpenRecordset()
    If rec.Fields.Count > 0 Then
    Tb = rec.GetRows
    End If
    
    rec.Close: Set rec = Nothing
    Set Rq = Nothing
    
    End Function
    puis dans le même module

    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
    Sub test()
     
    Dim dt1 As Date
    Dim i As long, j as long
     
    Dt1 = CDate("2/9/2020")
     
    ' remplissage de tb()
    call Fill_Event1
      Debug.Print UBound(tb, 1)          ' nb colonnes -1
      Debug.Print UBound(tb, 2)          ' nb lignes -1
     
     
    If UBound(Tb, 1) > 0 Then
    For i = 0 To UBound(Tb, 2)
    ' boucle sur les lignes
    For j = 0 To UBound(Tb, 1)
    ' boucle sur les colonnes
    if i < 3 MsgBox Tb(i, j)  'on vérifie seulement le 2 1eres lignes
    Next j
    next i
    End If
     
    End Sub
    pas vérifié mais ça devrait le faire
    cdlt
    Pour insérer le code VBA entre 2 balise il faut cliquer sur le bouton [#] dans l'éditeur
    "Always look at the bright side of life." Monty Python.

  3. #3
    Candidat au Club
    Homme Profil pro
    Gestion Lieu Culturel
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Gestion Lieu Culturel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour Micniv,

    Merci ta solution fonctionne avec une légère modification de ton code

    Voici :
    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 test()
    
    Dim D As Date
    
    Dim i As Integer
    Dim j As Integer
    
    D = CDate("2 / 9 / 2020")
    
     EstEvent1 (D)
    
    If UBound(Tb, 1) > 0 Then
    For i = 0 To UBound(Tb, 2)
    ' boucle sur les lignes
        For j = 0 To UBound(Tb, 1)
        ' boucle sur les colonnes
            If i < 3 Then
                MsgBox Tb(j, i) 'on vérifie seulement le 2 1eres lignes
            End If
        Next j
    Next i
    
    End If
    Ma Requête ne contient toujours qu'une ligne et je n'avais pas compris que cela formait quand même un tableau à 2 dimensions.
    Comme indiqué j'ai un besoin d'accélérer mon code est-ce que l'utilisation de "function" qui renvoie directement un tableau ou de Sub avec une variable globale change quelque chose ?

    Je profite de cette discussion pour une question de culture générale :

    J'ai fais une gestion de planning sur un format annuel avec donc 365 zones de texte à rafraichir, mon code fonctionne très bien en local mais travaillant en collaboration avec un Sharepoint j'ai passé mes tables locales en tables liées sur des listes Sharepoint après quelques modification de code mon code fonctionne mais il est très lent.
    Je suis passé d'une exécution d'environ 3 s. à plus de 20s.
    Est-ce normal ? Est-ce un problème de lenteur de réseau ? Ou dois-je revoir tout mon code pour travailler autrement ?

    Merci encore.

    Antonin.

  4. #4
    Candidat au Club
    Homme Profil pro
    Gestion Lieu Culturel
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Gestion Lieu Culturel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci encore,

    J'ai laissé ce travail en pause depuis quelques jours pour avancer sur d'autres.
    Mon premier problème est résolu alors je vais marquer cette discussion comme tel.

    Je recréerai un autre post pour le soucis de rapidité quand je me remettrai dessus.

    Bonne journée et merci à tous les membre actif du site pour l'aide précisieuse que vous nous apportez.

    Antonin

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2018, 11h02
  2. Lecture des valeurs d'une table
    Par Domi974 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/02/2015, 18h46
  3. Réponses: 1
    Dernier message: 29/01/2014, 16h51
  4. [MySQL] Perte de la liste des valeurs d'une requete sql
    Par yaya_la_rafale dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/04/2010, 14h30
  5. [NativeQuery] Recuperation des valeur d'une requete
    Par top_eagle dans le forum JPA
    Réponses: 16
    Dernier message: 08/01/2010, 12h11

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