Bonjour,
je suis en train de réaliser une application avec Excel vba, et suis vraiment débutant .
Mon pg récupére bien dans le tableau complet de ma base access et va l'écrire dans mon fichier excel, pour cela j(ai utilisé la requete ci-dessous
ce que je voudrais réaliser maintenant c'est de mettre une condition WHERE pour n'avoir qu'une ligne du tableau
et si cela est possible de pouvoir selectionner les colonnes
Je me prend la tete depuis pas mal de temps car chaque fois que je modifie la requete vSQL plus rien ne va s'inscrire dans mon fichier excel.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 4 nov. 2012 à 18:25
Salut
De quel type est ton objet vDonnées, comment est-il dimensionné ?
"mettre une condition WHERE pour n'avoir qu'une ligne du tableau"
Tout dépend du nombre de données (lignes) que ta requète extrait. Sans filtre, elle affiche tout, en effet.
Une clause Where est donc utile, mais rien ne garantit qu'il n'y aura qu'une seul ligne.
Le complément de requète suggéré par c148270 est correct si la colonne (champ) de ta table de base de données est de type texte.
Lorsqu'il s'agit d'un chiffre, il ne faut pas encadrer la donnée par des ' :
vSQL "Select * From " & vTable & " Where ChampChiffre 2003"
Rappels de base :
- Si les noms des colonnes comportent des caractères spéciaux (accents, espaces ...), il faut les encadrer par des crochets [ et ]
- Si le type de la colonne dans la base de données est :
Texte : Encadrer la donnée par des apostrophes '
Date : Encadrer la donnée par des dièses # (format date US)
Numérique : pas d'encadrement
Vala
Jack, =fr MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
J'ai modifié ma requete d'origine "vSQL = "Select * From " & vTable"
(le champ RefFT et du texte, à savoir si cela a son importance c'est une clé primaire)
en
vSQL "Select * From " & vTable & " Where RefFT 2012/VCL/340 "
mais cela ne fonctionne pas mieux l'erreur se produit sur la ligne ci-dessous
vDonnées.Open vSQL, vBaseDeDonnées, adOpenStatic, adLockReadOnly ( Public vDonnées As New ADODB.Recordset)
je pense que le pb vient de cette ligne quand l'on change la requete
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 nov. 2012 à 12:01
Relis ce que j'ai écrit à propos de l'encadrement des données.
vTable, String, oui, je m'en doutais.
C'est vDonnées qui serait intéressant.
Car il y a une autre possibilité dépendant du type d'objet : Une fois que tu as chargé toute la table dans ton RecordSet, il est possible de filtrer les infos qu'il contient.
Si c'est un objet ADODB.RecordSet, voir .Clone + .Filter (aide sur le net)
merci pour votre aide, j'ai avancé mais il me reste encore un petit pb
Suite à vos conseils voici ci-dessous la syntaxe Vba qui réalise le Where
vSQL "Select * FROM [FT] WHERE [RefFT] '2012/VCL/0342' "
Maintenant mon but est de remplacer le n° 2012/VCL/0342 par une variable voir ci-dessous
je déclare
Public ValeurAEnvoyer As String
Sub......
ValeurAEnvoyer = ActiveCell ( ActiveCell récupére un n° dans une cellule..exemple 2012/VCL/0342 )
La requéte Vba à ecrire devrait etre comme cela
vSQL = "SELECT * FROM [FT] WHERE [RefFT]=" & ValeurAEnvoyer
Mais voilà c'est là que le bas blesse la requete se plante
Je pense avoir un pb de syntaxe car pour que la requete soit ok, il faut que dans la cellule active l'on inscrive ce texte "2012/VCL/0342" et non 2012/VCL/0342 ce qui est génant
1 - Si je met dans la Cell active "2012/VCL/0342" tout est ok
2 - Si je met dans la Cell active 2012/VCL/0342 tout est Nok
le pb est que si je me sert d'un MsgBox pour lire la Cell Active il me met pour 1 ou 2 la valeur suivante "2012/VCL/0342"
Comment peut-on faire pour que " devienne réellement " en Vba (voir exemple)
Si j'écri en Vba Msgbox "Bonjour !"
la boite de dialogue va m'ecrire Bonjour !
alors que ma variable ou boite de dialogue devrait contenir cela "Bonjour !"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 nov. 2012 à 12:04
La syntaxe de c148270 est presque correcte ;-)
Il y a un " en trop en fin de ligne : ... & "'"
Les apostrophes ' ou guillemets " doivent toujours être en nombre pair.