Trouver la feuille d'une connexion de données externe

Will-e-coyote

XLDnaute Occasionnel
Bonsoir,

J'ai un tableur sur lequel figure plusieurs connexions de données externes (format texte) donc sur plusieurs feuilles...

Afin de me simplifier certains calculs, j'ajoute, sur les feuilles ou les connexions de données se déversent, des colonnes de formules que je veux mettre à jour à chaque fois que je rafraichi la connexion concernée (et uniquement elle). Le but étant d'augmenter ou de réduire les nombre de lignes de ces formules en fonction de la taille du fichier importé.

Pour ce faire, je ne lance pas la MAJ par l'interface Excel, mais par VBA. (Thisworkbook.connections(x).Refresh)

Mon problème est que je ne trouve pas le moyen de trouver simplement sur quelle feuille se trouve la connexion rafraichie afin d'y mettre à jour les formules.

Actuellement je parcoure l'ensemble des feuilles jusqu'à trouver la bonne :
Code:
        ThisWorkbook.Connections(1).Refresh
        On Error Resume Next
        For Each Feuille In ThisWorkbook.Worksheets
            If Feuille.QueryTables(1).WorkbookConnection.Name = ThisWorkbook.Connections(1).Name Then
                If Feuille.QueryTables.Count > 0 Then
                    Call MàJ_Formules(Feuille.Name)
                    Exit For
                End If
            End If
        Next Feuille

Je ne trouve pas le moyen d’accéder au nom de la feuille plus simplement... Une idée ? (Ma procédure fonctionne très bien mais je pense qu'il y a plus Sioux !)

Par avance, merci !

PS : Ma procédure MàJ_Formules,en plus, copie-colle en valeur le résultat des formules afin d'accélerer Excel...Utile quand on ramène 40 000 Lignes et plus sur plusieurs connexions... Dailleurs merci 'Crosoft pour le format xlsb...
 

Dranreb

XLDnaute Barbatruc
Re : Trouver la feuille d'une connexion de données externe

Bonjour
À vérifier par MsgBox TypeName(ThisWorkbook.Connections(1)), mais à priori cette expression renvoie directement un objet de type WorkbookConnection, lequel possède une propriété Ranges. Essayez MsgBox Workbook.Connections(1).Ranges.Address(External:=True)
Si ça affiche bien une adresse de plage vous auriez tout intérêt à réécrire Sub MàJFormules(ByVal Plage As Range)
Ce serait déjà mieux de transmettre l'objet Worksheet lui même plutôt que le nom de la feuille Excel qu'il représente, mais transmettre carrément le Range serait encore mieux.
 
Dernière édition:

Will-e-coyote

XLDnaute Occasionnel
Trouver la feuille d'une connexion de données externe [RESOLU]

Merci Dranreb !

Ca fonctionne effectivement sauf qu'il manquait un index au ranges

Workbook.Connections(1).Ranges(1).Address(External:=True)

J'avais bien noté l'objet Ranges mais l'ayant mal utilisé je n'arrivait qu'à en obtenir le nom de la connexion. En effet, si on omet l'index à Ranges, après avoir tapé "." Address ne faisait pas partie des objets accessibles...(J'utilisait ...Ranges.Parent)

Quant au passage du range en paramètre, j'ai un peu de mal avec cette technique...mais je promet de m'améliorer...

Encore un grand merci !!! :cool:
 

Dranreb

XLDnaute Barbatruc
Re : Trouver la feuille d'une connexion de données externe

Ça ne m'était pas venu à l’idée que la propriété Ranges de l'objet WorkbookConnection pouvait être un tableau ou une collection.
j'imaginais plus une plage multi-zones.
Adoptez la technique tout de suite. Il vaut toujours mieux transmettre à une procédure l'objet lui même quand on le tient que de ses propriétés d'identification qui obligent à le reconstituer de l'autre coté.
Pourquoi s'obliger, en transmettant Feuille.Name, à écrire dans la procédure ActiveWorbook.Worksheets(NomFeuille) au lieu de simplement LaFeuille à la place de tout ça, si on a mis comme paramètre ByVal LaFeuille As Worksheet au lieu de ByVal NomFeuille As String ?
Pourquoi s'obliger, en transmettant Plage.Address, à écrire dans la procédure ActiveSheet.Range(Adresse) au lieu de simplement Plage à la place de tout ça, si on a mis comme paramètre ByVal Plage As Range au lieu de ByVal Adresse As String ?
 

Discussions similaires

Réponses
7
Affichages
352

Statistiques des forums

Discussions
312 239
Messages
2 086 494
Membres
103 234
dernier inscrit
matteo75654548