Variable

Résolu
Signaler
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour, j'éspére ne pas me tromper d'endroit pour poser ma question.
Le but pour moi est de pouvoir envoyer une variable d'excel à vb
J'ai un petit probléme de syntaxe, je vous joins le code se sera plus parlant:

Private Sub CommandButton1_Click()
Dim lenom As Variant
lenom = Sheets("PAGE").Range("f1")


 With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MEDIANE;UID=sa;;APP=Microsoft Office 2003;WSID=TSE5;DATABASE=MEDIANE" _
        , Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) & "FROM MEDIANE.dbo.BIDE BIDE" & Chr(13) & "" & Chr(10) & "WHERE (BIDE.IDNOM=" & lenom & ")" _
        )
        .Name = "Lancer la requête à partir de MEDIANE"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Le probléme vient de la syntaxe dans la déclaration de la variable ou dans la requéte elle méme, j'ai essayer pas mal de solutions, mais là je suis limite à m'arracher les cheveux!!


PS: j'ai essayer avec une donnée en dure à la place de la variable et ça marche
Merci à tous ceux qui pourront m'apporter leur aide.

Gil

15 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Vraiment ? dans le code que tu mets en tout cas, ma syntaxe n'y est pas :

Remplace tout ton bloc With par :

With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MEDIANE;UID=sa;;APP=Microsoft Office 2003;WSID=TSE5;DATABASE=MEDIANE" _
        , Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) & "FROM MEDIANE.dbo.BIDE BIDE" & Chr(13) & "" & Chr(10) & "WHERE (BIDE.IDCLEUNIK=" & """" & lenom & """" & ")" _
        )
        .Name = "Lancer la requête à partir de MEDIANE"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Si ça ne marche pas, tu as bien un message d'erreur ? Donne le.

Tu lances avec une macro ou un bouton ?
Et le code est bien enregistré dans la feuille ou alors, tu as bien activé ta feuille avant ?

Molenn
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Content que cela fonctionne. Donc si ton problème est résolu, il ne te reste plus qu'à appuyer sur réponse acceptée sur le ou les posts qui t'ont aidé à avancer.

<hr size="2" width="100%" />@+: Ju£i?n
Pensez: Réponse
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
salut

essaie lenom.TEXT ou .Value.
NOTE: c'est du VBA pas du VBS

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Moi, ce que je ne comprends pas, c'est pourquoi mettre dans le bout de code qui ressemble à une requête SQL, des Chr(13) et Chr(10)
"SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) &
Faire un retour chariot et un retour à la ligne dans une requête SQL, ça ne peut que planter non ?

Molenn
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Bonjour Molenn, merci de t'intéresser à mon probléme , pour les chr(13), je t'explique, je n'ai pas taper le code mais j'ai enregistrer une macro pour ouvrir ma base et lancer une requéte, avec une donnée en dure et ensuite j'ai récupérer le code dans vbs et là ça marche, le probléme vient au moment ou je veux transformer ma donnée en dure en variable.
Pour Jrivet, j'ai essayer le .value et le .txt, mais sans succés
Merci à tous

Gil
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Une chose à préciser encore : tu as récupéré le code dans le VBS, à mon avis, c'est une erreur, tu l'as récupéré dans le VBE et tu fais du VBA là
Je serais vraiment étonné de voir un code VBS (VBScript) commençant par :
Private Sub CommandButton1_Click()

Ceci étant, je me demande si le type de ta variable ne pose pas pb ...
Ton critère est :
"WHERE (BIDE.IDNOM=" & lenom & ")"
Vu le nom de ton champ (IDNOM), je pense que ce que tu cherches est un chiffre entier.
Déclares ta variable comme suit :
Dim lenom As Integer
lenom = Sheets("PAGE").Range("f1").value
Regarde avec le débuggeur ou colle un msgbox lenom pour être sûr que ta variable contient bien le chiffre à contrôler.

Mets ta syntaxe m'étonne quand même pour du VBA, tu es sûr que si tu mets 
 "SELECT BIDE.IDNOM FROM MEDIANE.dbo.BIDE BIDE WHERE BIDE.IDNOM=" & lenom
ça ne fonctionne pas ?

Molenn
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Mollen, je t'assure le commandbutton vient bien de vb script, c'est un simple bouton sur une page excel, j'ai essayer ta syntaxe......., mais ça marche pas ...désolé
Merci

Gil
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Tu m'étonnes beaucoup quand même, mais pas grave, c'est pas le propos ^^

J'ai utilisé mon enregistreur de macro dans Excel pour récupérer la même chose que toi, en me connectant sur une base ACCESS. Voici ce que ça me donne :

With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MS Access Database;DBQ=C:\BAM.mdb;DefaultDir=C:;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
        , Destination:=Range("F9"))
        .CommandText = Array( _
        "SELECT RésultatsIndicateur.NomCR, RésultatsIndicateur.TotalitéIndispo" & Chr(13) & "" & Chr(10) & "FROM `C:\BAM`.RésultatsIndicateur RésultatsIndicateur" _
        )
        .Name = "Lancer la requête à partir de MS Access Database_1"

Blabla, je saute la fin du code inutile à la compréhension

1ère chose, effectivement, ça colle des retours charriot O_o ... Mais bon passons (la logique MSoft sans doute)

Par rapport à ta requête, je ne vois qu'une différence : j'ai le chemin de ma base de données dans le FROM ... mais est-ce que c'est à cause de la connexion à ACESS ? Aucune idée.
"SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) & "FROM MEDIANE.dbo.BIDE BIDE" & Chr(13) & "" & Chr(10) & "WHERE (BIDE.IDNOM=" & lenom & ")" _
Normal au fait que tu aies BIDE marqué 2 fois ?

Sinon, j'avoue que je sèche.
Tu as bien vérifié le contenu de ta variable lenom ? tu as bien ce que tu attendais ?
La seule autre chose que je vois, c'est le type de ton champ IDNOM. Il est bien de type Numérique ou NuméroAuto ? S'il est de type texte, ta requête ne peut pas fonctionner comme elle est, mais ça ne fonctionnerait pas en dur ... à moins que lorsque tu rentres la valeur en dur, tu l'encadres avec une quote ? Ce qui expliquerait ton erreur au passage.

En résumé, j'ai épuisé mes quelques connaissances là-dessus

Molenn
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Bonjour Molenn, merci encore pour ton aide, dans la fin de ton message tu me dis que si c'est du texte ça ne peut pas marcher, car effectivement c'est bien du texte et non du numérique et ma valeur en dure , pour que ça fonctionne je l'avais bien entouré de quotes, alors si ça t'éclaire pour une solution je suis evidemment preneur.
Pour le Bide noter deux fois, c'est msquery qui fait cette syntaxe, moi aussi je n'ai pas compris, mais il m'a toujours fait ça.
Gil
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Ah ben voilà alors ^^ ... Ton champ est de type texte, donc, il faut que tu encadres ta variable par des quotes. Il y a plusieurs syntaxes qui te permettent de le faire, personnellement, j'utilise la suivante, pas forcément la mieux :

"SELECT BIDE.IDNOM FROM MEDIANE.dbo.BIDE BIDE WHERE BIDE.IDNOM=" & """" & lenom & """"

Voilà voilà.

Molenn
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Bonjour et merci à ceux qui m'on aider, particuliérement à toi Molenn, j'essairai le code demain, car aujourd'hui je suis en repos, je vous informe pour la suite
Bye
Gil
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Bonjour à tous, je vous rejoins le code complet, impeccable ça marche avec un champ numérique, par contre pas moyen avec un champ texte, j'ai essayer ta syntaxe Molenn mais pas moyen.......... 
Private Sub CommandButton1_Click()
    Columns("A:A").Select
    Selection.ClearContents
 Dim lenom As Variant
lenom = Sheets("PAGE").Range("f1")


 With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MEDIANE;UID=sa;;APP=Microsoft Office 2003;WSID=TSE5;DATABASE=MEDIANE" _
        , Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) & "FROM MEDIANE.dbo.BIDE BIDE" & Chr(13) & "" & Chr(10) & "WHERE (BIDE.IDCLEUNIK=" & lenom & ")" _
        )
        .Name = "Lancer la requête à partir de MEDIANE"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Gil
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Bonjour Molenn, effectivement dans le code publié, il n'y avait pas ton code, j'ai mis celui-ci car il fonctionne (en numérique).
J'ai fait comme tu as dis j'ai remplacé tout le bloc with, voilà l'erreur renvoyer
"erreur d'execution 1004"
"erreur général odbc"
et quand je fais le débogage il me surligne en jaune :
.Refresh BackgroundQuery:=False
Pour la façon dont j'ai construit le fichier, voilà ma méthode, j'ai ouvert une feuille excel, j'ai enregistrer une  macro en allant chercher les donnée externes, ouverture de ms query, conditions et retour excel, j'ai ensuite créer un bouton sur la méme page et fais un copier coller du code entre les balises de ce dernier, voilà je crois que je n'ai rien oublier...
A bientôt
Merci
Gil
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
J'avoue que je sèche un peu là ... En dernier ressort, essaye de remplacer ta requête par celle-ci :

"SELECT BIDE.IDNOM " & Chr(13) & "" & Chr(10) & "FROM MEDIANE.dbo.BIDE BIDE" & Chr(13) & "" & Chr(10) & "WHERE (BIDE.IDCLEUNIK='" & lenom & "')" _
        )

Molenn
Messages postés
9
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
21 mai 2008

Salut à tous, mille fois merci à Molenn, hourra ça marche enfin!!!
Tous va bien, mis à part les quelques cheveux arrachés de ma tête!!

Gil