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

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
Mais quand j'applique la formule xretrieve dans mon fichier excel il me renvois un beau #VALEUR!

Si quelqu'un peut m'aider