OVH Cloud OVH Cloud

Importer des données et/ou propriétés de feuilles

1 réponse
Avatar
Manu
Re-bonjour à tous,

Toujours pour mon projet, je suis en bute à un double problème :

1. je voudrais, au départ d'un ou plusiers classeurs Excel partagés,
importer certaines données dans un fichier synthétique unique. Je le fais
sans problèmes en liant la source des cellules concernées dans les différents
documents vers les cellules concernées du fichier unique. Problème : Excel me
demande si je veux rafraîchir les liaisons à chaque ouverture de ce dernier.
Existe-t-il, par du code automatique lancé à l'ouverture de celui-ci
(Workbook_Open, ...), une possibilité de le faire en toute transparence, sans
message de confirmation (et sans pointer expressément vers les fichiers liés
avec une dialog box) ?

2. J'essaye de faire la même chose (importation automatique depuis plusieurs
classeurs), mais cette fois pour les onglets et leurs valeurs. Je m'explique
: les fichiers source contiennent des données réparties par année au moyen
d'onglets, et je cherche à ce que le fichier synthétique extraie ces valeurs
d'onglets (pour les faire apparaître dans un menu déroulant ComboBox, qui
s'adapterait ainsi de façon dynamique en fonction des années à prendre en
compte dans les fichiers source). Quelqu'un connaît-il une procédure pour
cela ?

J'espère que mes explications auront été suffisament claires, encore merci à
tous pour vos réponses ...

1 réponse

Avatar
Manu
Pour ceux que cela intéressent, j'ai trouvé la solution à ma première
question (sur base d'un code légèrement modifié, récupéré sur le site de
Frédéric Sigonneau : "lire dans un fichier fermé"). A partir d'un bouton de
commande, la procédure lancée extrait une valeur dans un fichier externe sans
liaisons et sans l'ouvrir (pas d'apparition de la source à l'écran) :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
Private Sub CommandButton2_Click()

Call TestGetValue

End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
Sub TestGetValue()

Dim p As String
Dim f As String
Dim s As String
Dim a As String

' Modifiez à loisir les valeurs de la source recherchée
p = "D:UserXl"
f = "Classeur_Source.xls"
s = "Feuil1"
a = "A1"

' Exemple de cellule choisie pour y injecter la donnée extraite
Range("C4").Value = GetValue(p, f, s, a)

End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
Private Function GetValue(path, file, sheet, ref) As String
'path: The drive and path to the closed file (e.g., "D:UserXl")
'file: The workbook name (e.g., "Classeur.xls")
'sheet: The worksheet name (e.g., "Feuil1")
'ref: The cell reference (e.g., "A1")

Dim arg As String

On Error GoTo HandleErr
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If

'Create the argument
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)

'Execute an XLM macro
GetValue = ExecuteExcel4Macro(arg)

ExitHere:
Exit Function

HandleErr:
Select Case Err.Number
Case 13
MsgBox "La feuille " & sheet & " n'existe pas !"
End
Case Else
MsgBox "Erreur " & Err.Number & " : " & Err.Description, vbCritical,
"Module1.GetValue" 'Gestionnaire d'erreurs:$$N=Module1.GetValue
End Select
End Function
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -