Bonjour,
J'essaye d'utiliser le tuto de cafeine sur l'utilisation du ADO pour utiliser une requete Access dans Excel mais je n'y arrive pas
J'ai une base de donnée avec une table INDISPOCHARGESAFFAIRES avec 3 champs chargeaffaire , mois, heures
Je cherche dans un fichier excel à afficher pour différents mois ur une ligne le nombre d'heures pour un chargé d'affaires
J'ai essayer d'adapter le code à mon probléme
Mais quand j'applique la formule xretrieve dans mon fichier excel il me renvois un beau #VALEUR!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 Public cnx As ADODB.Connection Sub auto_open() ' La sub auto_open possède la propriété d'être automatiquement ' exécutée à l'ouverture du classeur Excel ' à l'identique : auto_close est exécutée sur la fermeture Dim strPath As String ' Seule contrainte une cellule nommée strPath ' doit être présente dans le classeur et ' renvoyer sur le chemin de l'appli ' en l'occurence Comptoir.mdb Application.Goto Reference:="StrPath" strPath = ActiveCell ' Nous testons si le fichier est accessible If Len(Dir(strPath)) > 0 Then ' Déclaration de la variable de connexion Set cnx = New ADODB.Connection ' Connexion à la base ConnectDB cnx, strPath Else MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _ strPath & vbCrLf & _ "n'est pas un chemin valide.", vbCritical + vbOKOnly End If End Sub Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal strPath As String) 'Définition du pilote de connexion cnx.Provider = "Microsoft.Jet.Oledb.4.0" 'Définition de la chaîne de connexion cnx.ConnectionString = strPath 'Ouverture de la base de données cnx.Open End Sub Public Function xRetrieve(Optional ByVal Chargeaffaires As String = vbNullString, _ Optional ByVal Mois As Date = 0) ' Chaine de caractère : nom de l'employé ou cellule qui contient cette information ' Date : date qui va indiquer le mois de la requête ou cellule qui contient cette information ' Booléen : Si vrai => informations trimestrielles, Si faux => informations mensuelles Dim rec As New ADODB.Recordset Dim strSQL As String 'Redaction du SQL strSQL = "SELECT Sum([Heures]) AS HEURES" & _ "FROM [INDISPOCHARGESAFFAIRES] WHERE 1=1" ' rappelons que les chaines de caractères en SQL sont à entourer de '' ' /!\ toute insertion de chaine dans un SQL comporte un danger pour les données ' nous pourrions fort bien ici contrôler le contenu pour neutraliser la ' la présence de mots clés placés involontairement ou par malveillance If Len(Chargeaffaires) > 0 Then strSQL = strSQL & " And ([Chargeaffaires] = '" & Chargeaffaires & "')" End If ' rappelons que les dates en SQL sont à mettre au format US If Mois > 0 Then strSQL = strSQL & " And ([Mois] '" & Mois & "')" End If Dim rst As New ADODB.Recordset rst.Open strSQL, cnx On Error GoTo errH01 rst.MoveFirst xRetrieve = CDbl(rst("HEURES")) rst.Close Set rst = Nothing Exit Function errH01: ' Nous sommes dans un tableur excel, ' nous ne cherchons pas à analyser les éventuelles erreurs ' nous rendons la main au tableur. Err.Clear xRetrieve = 0 rst.Close Set rst = Nothing End Function
Si quelqu'un peut m'aider
Partager