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 :

Recordset, Getrows et Join(tableau,"")


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2011
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 32
    Par défaut Recordset, Getrows et Join(tableau,"")
    Bonjour à toutes et à tous,

    Je me demande si la fonction vba Join(tableau,""), utilisée pour concaténer les éléments d'un tableau, fonctionne avec une variable du type Variant.

    Le bout de 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
    19
    20
    21
    22
    23
     
    'Création des Tables avec Liens
    'Dim Tblreseau(), ConcatSig As String, i As Integer
    Dim oRst As DAO.Recordset, Maxboucle As Long
    Dim Tableau As Variant
     
    'Crée une liste d'enregistrement en fonction du réseau
            'Set oRst = db.OpenRecordset("SELECT * FROM [BA - PRIX PROMO A BLOQUER] WHERE Reseau=" & Chr(34) & Tblreseau(i) & Chr(34), dbOpenDynaset)
            Set oRst = db.OpenRecordset("SELECT * FROM [BA - PRIX PROMO A BLOQUER] WHERE Reseau=" & Chr(34) & "HM" & Chr(34), dbOpenDynaset)
            'Positionne sur le dernier enregistrement de la liste
            'pour compter le nombre et ensuite calculer le nombre
            'de boucle,a fin de limiter le nombre de sigma dans la
            'requête.
            oRst.MoveLast
            Maxboucle = Int((oRst.RecordCount / 85) - 0.13) + 1
            'Part du premier enregistrement du RecordSet
            oRst.MoveFirst
            'Selectionne les 85 premier enregistrement
            Tableau = oRst.GetRows(85)
            'Récupère le nombre d'enregistrements Lus
            NbRecord = UBound(Tableau, 2) + 1
     
    msgbox join(Tableau,"")
    c'est ce dernier join(Tableau,"")


    J'ai le message erreur suivant:

    erreur d'execution "5"argument ou appel de procedure incorrect ...

    Comment faire pour concaténer tout les éléments d"une variable variant?

    merci par avance,

    JP

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Salut,

    Il me semble que la fonction Join prend en argument 1 tableau de dimension 1.
    Or, La fonction GetRows renvoie 1 tableau de dimension 2

    Il faut peut-être ajouter ce code à la fin :

    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
     ...
     
    str = vbNullString
     
     For i = LBound(Tableau, 2) To UBound(Tableau, 2)
     
        For j = LBound(Tableau, 1) To UBound(Tableau, 1)
            str = str & (Tableau(j, i)) & " "
        Next j
     
        str = str & vbNewLine
     
     Next i
     
    MsgBox str
    A tester,

    Il faut ajouter aussi la tabulation

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    En général un tableau se déclare comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tableau() As Variant
    Là tu as déclaré une variable, donc je pense que c'est pour cela que le Join ne fonctionne pas.

    De plus ta ligne ne renvoie pas de données, alors pourquoi utilise la fonction MsgBox ? Elle réalise une opération.

    Philippe

  4. #4
    Membre averti
    Inscrit en
    Février 2011
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 32
    Par défaut
    Bonjour à tous les deux,

    Philippe,
    j'ai essayé de déclaré la variable tableau avec les parenthèses ' tableau() ' pour quelle soit un vrai tableau.

    Dim tableau() as variant

    Par contre, la méthode join(tableau(), "") n'a pas fonctionnée.
    Comment faire pour que ça marche? Faut-il que je "remplisse" le tableau avec tous les enregistrements issu de la méthode getrows, en utilisant une boucle?

    Justement je souhaitait éviter de faire de boucle.

    Cependant, pour pouvoir avancer, (car cette concaténation est la seule info qui me manquait), j'ai utiliser une boucle comme a proposé par User.

    Je vous joint le code. la concaténation fonctionne comme je le souhaitait tel quel, mais si cela est possible de faire avec la méthode join, alors je suis prenneur.

    en vous remerciant,
    JP


    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
     
    'Création des Tables avec Liens
    'Dim Tblreseau(), ConcatSig As String, i As Integer
    Dim oRst As DAO.Recordset, Maxboucle As Long, Nboucle As Long
     
    Dim Tableau As Variant
    Dim j As Long
    Dim ConcaSig As String
     
    'Tblreseau(0) = "HM"
    'Tblreseau(1) = "SM"
     
    'For i = 0 To 1
     
     
            'Crée une liste d'enregistrement en fonction du réseau
            'Set oRst = db.OpenRecordset("SELECT * FROM [BA - PRIX PROMO A BLOQUER] WHERE Reseau=" & Chr(34) & Tblreseau(i) & Chr(34) & "ORDER BY Sigma", dbOpenDynaset)
     
     
            Set oRst = db.OpenRecordset("SELECT Sigma  FROM [BA - PRIX PROMO A BLOQUER] WHERE Reseau=" & Chr(34) & "HM" & Chr(34) & "ORDER BY Sigma", dbOpenDynaset)
            'Positionne sur le dernier enregistrement de la liste
            'pour compter le nombre et ensuite calculer le nombre
            'de boucle,a fin de limiter le nombre de sigma dans la
            'requête.
            oRst.MoveLast
            Maxboucle = Int((oRst.RecordCount / 85) - 0.13) + 1
            Nboucle = 0
            'Part du premier enregistrement du RecordSet
            oRst.MoveFirst
     
            Do While Not Nboucle = Maxboucle
                'Selectionne les 85 premier enregistrement
                Tableau = oRst.GetRows(85)
                'Récupère le nombre d'enregistrements Lus
                Nbrecord = UBound(Tableau, 2) + 1
     
                ConcatSig = ""
                j = 0
     
                    Do While Not j = UBound(Tableau, 2) + 1
                        If ConcatSig = "" Then
                            ConcatSig = Tableau(0, j)
                        Else
                            ConcatSig = ConcatSig & Chr(34) & " ou " & Chr(34) & Tableau(0, j)
                        End If
     
                    j = j + 1
                    Loop
     
                ConcatSig = Chr(34) & ConcatSig & Chr(34)
     
                Nboucle = Nboucle + 1
     
                MsgBox ConcatSig
                MsgBox Len(ConcatSig)
            Loop
     
    'Next i

Discussions similaires

  1. GetRows : Récupérer le contenu d'un RecordSet ADO dans un tableau
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/06/2014, 10h13
  2. Réponses: 0
    Dernier message: 05/12/2007, 14h13

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