Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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, 17h22   #1
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Par défaut Requête VBA plusieurs critères

Bonjour Forum,

J'effectue une requête avec VBA dans une base de donnée SQL. Voici le fonctionnement:
mon but est d'obtenir le nombre d'heure que les employés ont effectuées sur différents contrats.

Mon premier problème était que le nombre de contrat d'on je voulais obtenir les heures est variable. J'ai réussi a contourné ce problème en effectuant un boucle qui ajoute les critères.

Où est-ce que ça ne marche pas c'est lorsque je désire ajouté d'autre critères que les contrats. Dans mon exemple je désire seulement les hrs compris dans le secteur '2' et le Département '3' de ces contrats.

Voici mon code qui me donne l'erreur: "Arguments are of the wrong type, are out of accepteble range, or are in clonflict with one another"


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    strSQlHrsTech = "(SELECT NoProjet, HrsTotal FROM operation WHERE Secteur='2' AND Departement='" & noProd & "' AND NoProjet='" & Range("A5").Value & "') OR "
 
        critere = ""
        For i = 5 To last
            noProjet = Cells(i, 1)
            critere = critere & "(Secteur='2' AND Departement='" & noProd & "' AND NoProjet='" & noProjet & "') OR "
        Next i
 
    strSQlHrsTech = strSQlHrsTech & critere
    strSQlHrsTech = Left(strSQlHrsTech, Len(strSQlHrsTech) - 4)
    strSQlHrsTech = strSQlHrsTech & " GROUP BY NoProduit ORDER BY NoProduit"
 
    MsgBox strSQlHrsTech
 
    Set strSQlHrsTech = New ADODB.Recordset
    strSQlHrsTech.Open strSQlHrsTech, cnHrs, adOpenDynamic, adLockReadOnly
 
    Range("X4").CopyFromRecordset strSQlHrsTech
Si vous avez une autre façon de faire la requête n'hésitez pas, car je ne suis pas un pro en SQL, j'ai seulement testé selon ce que je pensais.

Merci
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 17h32   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 893
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 893
Points : 7 170
Points : 7 170
Bonjour,

Peut être quelque chose comme cela (utilisation d'un in plutôt que des Or)
Code :
1
2
3
4
5
6
7
8
9
10
11
    strSQlHrsTech = "(SELECT NoProjet, HrsTotal FROM operation WHERE Secteur='2' AND Departement='" & noProd & "' AND NoProjet in ("
 
        For i = 5 To last
 
            if noProjet <> "" then noProjet =noProjet & ","
            noProjet = noProjet & "'" & Cells(i, 1).value & "'"
 
        Next i
 
    strSQlHrsTech = strSQlHrsTech & noProjet & ")"
    strSQlHrsTech = strSQlHrsTech & " GROUP BY NoProduit ORDER BY NoProduit"
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 18h49   #3
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Merci de ta réponse rapide jFontaine,
Mais ça ne fonctionne pas, ça me donne cette erreur: "ODBC driver does not suppor the requested properties"

voici la chaine SQL que ça me donne

Code :
SELECT NoProjet, HrsTotal FROM operation WHERE Secteur='2' AND Departement='3' AND NoProjet IN ('AB4938','US5938','AB5699','DD6069','PP6041','RS6102','RS6092','RR6112','AB6000') GROUP BY NoProduit ORDER BY NoProduit
Merci
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 19h43   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 893
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 893
Points : 7 170
Points : 7 170
Je ne vois pas d'anomalie dans la requête.

Par contre, es tu sur que Secteur et Department sont de type Char dans la table.
Car s'ils sont numérique il te faudra supprimer les quotes
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 21h34   #5
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Bâtiment

Informations forums :
Inscription : mai 2011
Messages : 99
Points : 29
Points : 29
Ok j'ai trouvé le problème, l'opérateur "IN" doit être utilisé dans la clause "WHERE" ensuite on inscrit nos autres critères avec les clause "AND"


J'ai un autre problème relier à ma requête, car j'utilise la méthode "recordcount" afin de faire une boucle sur chaque données de mon recordset, mais la méthode renvoie la valeur "-1" et je ne comprend pas pourquoi c'est pourtant pas la première fois que j'utilise cette méthode.

J'utilise cette méthode afin de transférer tout les donnée de mon recordset dans un tableau et ensuite le copier dans excel (Car cette façon est plus rapide que d'utiliser la "Copyformrecord".

Si vous connaissez une autre façon je suis ouvert au suggestion.

Je ne sais pas si je dois refaire un autre post car il est lié a celui-ci, mais si je doit en faire un dites-le moi.


Merci!!!
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web