Test "requête connexion" PQuery existe
Bonjour à tous,
Je travaille avec Excel 2016.
Je dois consolider des données industrielles stockées par année et par fichier (chaque fichier prend le nom de son année) dans un fichier de consolidation.
Le fichier consolidant comprend donc:
- une "requête connexion" par année
- une requête qui consolide ces requêtes, chargée sous forme de table dans l'onglet wks_consolidation
Je souhaite créer une fonction pour tester l'existence d'une requête connexion puis de la créer si la valeur est false.
Vous trouverez le code dans le module "TestsEtFonctions" du fichier "ConsolidationThermoFormeuse_4.xlsm" ci-joint/
Je bute sur le test de l'existence d"une connexion: je ne trouve pas de quel objet il s'agit. J'ai écrit "Len(ActiveWorkbook.Connections(str_Requete_DontExistenceAtester)) > 0": je sais que ça ne renvoie aucune valeur, mais vous comprenez ce que je veux obtenir j'espère.
Merci.
Etxe.
Sub macro_TestExistence_Requete()
Dim str_Requete_ApasserEnParametreFonctionTestExistence As String
With wks_formulaire
str_Requete_ApasserEnParametreFonctionTestExistence = .Range("cell_Annee").Value
End With
If function_TestExistence_RequetePowerQuery(str_Requete_ApasserEnParametreFonctionTestExistence) = True Then
MsgBox "Ok, la requete existe", vbOKOnly + vbInformation
Else
MsgBox "la requete spécifiée n'existe pas", vbOKOnly + vbExclamation
End If
End Sub
Public Function function_TestExistence_RequetePowerQuery(str_Requete_DontExistenceAtester As String) As Boolean
'Dans quelle collection pointer? et avec quelle méthode?
On Error Resume Next
If Len(ActiveWorkbook.Connections(str_Requete_DontExistenceAtester)) > 0 Then
Debug.Print ActiveWorkbook.Connections(str_Requete_DontExistenceAtester)
function_TestExistence_RequetePowerQuery = True
On Error GoTo 0
Else
function_TestExistence_RequetePowerQuery = False
End If
End Function
Bonjour
Pourquoi ne pas stocker les fichier dans un dossier et consolider en une requête le dossier ?
Ce serait plus dynamique et transparent, je crois
Bonjour Chris,
Oui, cela fonctionne.
Je souhaiterais tout de même trouver comment tester l'existence d'une requête connexion, aurais-tu une piste s'il te plaît?
Merci de ton aide.
Etxe.
Bonjour,
Pour vérifier l'existence d'une connexion, tu peux utiliser cette fonction :
Public Function ConnExists(name As String, Optional wb As Workbook) As Boolean
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error Resume Next
ConnExists = CBool(Len(wb.Connections(name).name))
End Function
Pour une requête, :
Public Function QueryExists(name As String, Optional wb As Workbook) As Boolean
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error Resume Next
QueryExists = CBool(Len(wb.Queries(name).name))
End Function
Cdlt.
Bonjour Jean-Eric, merci pour ta réponse, ça marche.
J'avais trouvé une solution entre temps, plus lourde que la tienne (cf infra).
J'ai une question: au sujet de CBool, je vois sur l'aide que " Si l’expression correspond à une valeur différente de zéro, CBool renvoie vrai, dans le cas contraire, elle renvoie faux." Est-elle aussi par défaut = faux? En effet on provoque une erreur si le string est vide, on ne met pas la valeur à zéro.
Merci d'avance!
Etxe.
Public Function function_TestExistence_RequetePowerQuery(str_Requete_DontExistenceAtester As String) As Boolean
On Error GoTo Erreur:
If Len(ActiveWorkbook.Queries(str_Requete_DontExistenceAtester).name) > 0 Then function_TestExistence_RequetePowerQuery = True
Exit Function
Erreur:
function_TestExistence_RequetePowerQuery = False
End Function