Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2011, 16h02   #1
Invité régulier
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 7
Points : 7
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 :
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
Brasileiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 22h06   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 258
Points : 5 258
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 :
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+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 04h56   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

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

Code :
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 10h37   #4
Invité régulier
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 7
Points : 7
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 :
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
Brasileiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h16.


 
 
 
 
Partenaires

Hébergement Web