Excel vba

Marco55 - 4 nov. 2012 à 08:01
 Marco55 - 6 nov. 2012 à 21:05
Amateur ou nul


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

vSQL = "Select * From " & vTable
vDonnées.Open vSQL, vBaseDeDonnées, adOpenStatic, adLockReadOnly

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.

merci pour votre aide car là je suis sec

9 réponses

c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
4 nov. 2012 à 09:49
Bonjour

Voici un exemple :
SELECT test.*, test.ann
FROM test
WHERE (((test.ann)="2003"));

bonne journée
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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"

Consulter et apprendre : <site de référence US> ou <celui-ci FR>

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)
0
Amateur ou nul

Bonjour,

Merci pour les infos,

mais pas mieux

Vtable est déclaré As String

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

merci quand meme
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
5 nov. 2012 à 08:26
Bonjour
Compare la syntaxe de ta requête à celle que j'ai fourni comme exemple

bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Amateur ou nul

Bonjour, Bonsoir

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 !"


merci si vous avez des idées

bonne soirée
0
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
6 nov. 2012 à 08:07
Bonjour
Essaye
vSQL = "SELECT * FROM [FT] WHERE [RefFT]='" & ValeurAEnvoyer & "'""

avec le numéro 2

et utilise me mode débug pour vétifier

bonne journée
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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.
0
Amateur ou nul


Bonjour,

je vous remercie bien pour vos infos le Pb est résolu.

Vous trouverez ci-dessous la syntaxe qui admet la condion where venus d'une variable.

vSQL = "SELECT * FROM [FT] WHERE [RefFT]='" & ValeurAEnvoyer1 & "'"


bien Cordialement est merci de m'avoir guidé

MZ
0
Rejoignez-nous