[VBA] Extraire les données d'un classeur Excel fermé
2 réponses
Nemroth
Bonjour à tous,
Voici mon problème : je n'en n'ai plus !!!
Je cherchais à créer à la volée en VBA les éléments de champs de formulaires
liste déroulante en fonction des données de plusieurs classeurs Excel et en
fonction de divers critères (OUF !!!).
Publipostage avec options de requête, bien sûr ! Eh non (selon mon expérience au
moins), car qui dit publipostage dit une seule source de données et non
plusieurs.
Bon, alors on lance Excel à partir de Word, on charge les classeurs dont on a
besoin, on récupère les données et on ferme Excel. Voire même si on est
perfectionniste, on cache Excel pour faire tout ça ...
Pour ma part je préférais accéder aux données des classeurs sans les ouvrir, et
donc sans ouvrir Excel (je trouve ça plus propre !!!).
La voici la voilou la solution, pour ceusse qu'ça intéresse (je commence à
compter sur mes doigts).
Ceci dit je n'ai pas beaucoup de mérite, je l'ai trouvée sur Excelabo et il n'y
avait presque rien à retoucher pour que ça fonctionne dans Word :
Elle utilise ADO, il faut donc activer dans VBE "Microsoft ActiveX
Data Objets Components 2.x Library" (Menu Outils-Références)
Voic les procédures (c) Excelabo et à priori d'autres aussi...
Sub LireXLFermeADO()
Dim Fich$, Arr
Fich = "D:\Dossiers\Boulot\Gestion\Fichier.xls"
'récup des données à partir de l'adresse d'une plage de cellules
GetExternalData Fich, "Feuil1", "A2:I2", False, Arr
' MsgBox Arr(1, 5) 'Lignes-Colonnes (pour vérification)
' récup des données à partir du nom d'une plage de cellules
' GetExternalData Fich, "", "essainom", False, Arr
End Sub
'renvoie les valeurs d'une plage de cellules (srcRange)
'd'une feuille (srcSheet) d'un fichier (srcFile) fermé
'dans un tableau (outArr)
'le paramètre TTL indique si la plage a ou non une ligne d'entêtes
Sub GetExternalData(srcFile As String, _
srcSheet As String, _
srcRange As String, _
TTL As Boolean, _
outArr As Variant)
'd'après Héctor Miguel, mpep
Dim myConn As ADODB.Connection, myCmd As ADODB.Command
Dim HDR As String, myRS As ADODB.Recordset, RS_n As Integer, RS_f As Integer
Dim Arr
Set myConn = New ADODB.Connection
If TTL = True Then HDR = "Yes" Else HDR = "No"
myConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & srcFile & ";" & _
"Extended Properties=""Excel 8.0;" & _
"HDR=" & HDR & ";IMEX=1;"""
Set myCmd = New ADODB.Command
myCmd.ActiveConnection = myConn
If srcSheet = "" _
Then myCmd.CommandText = "SELECT * from `" & srcRange & "`" _
Else myCmd.CommandText = "SELECT * from `" & srcSheet & "$" & srcRange & "`"
Set myRS = New ADODB.Recordset
myRS.Open myCmd, , adOpenKeyset, adLockOptimistic
ReDim Arr(1 To myRS.RecordCount, 1 To myRS.Fields.Count)
myRS.MoveFirst
Do While Not myRS.EOF
For RS_n = 1 To myRS.RecordCount 'lignes
For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
Arr(RS_n, RS_f + 1) = myRS.Fields(RS_f).Value
Next
myRS.MoveNext
Next
Loop
myConn.Close
Set myRS = Nothing
Set myCmd = Nothing
Set myConn = Nothing
outArr = Arr
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Anacoluthe
Bonjour !
"Nemroth" nous a écrit ...
Voici mon problème : je n'en n'ai plus !!!
Joli exemple d'ADO :-) Tu as sans doute placé encore ton code spécifique Word dans LireXLFermeADO elle-même pour utiliser directement la variable privée de type tableau redimensionné 'Arr' Merci
Anacoluthe « La connaissance est la seule chose qui s'accroît lorsqu'on la partage. » - Sacha BOUDJEMA
Bonjour !
"Nemroth" nous a écrit ...
Voici mon problème : je n'en n'ai plus !!!
Joli exemple d'ADO :-)
Tu as sans doute placé encore ton code spécifique Word dans
LireXLFermeADO elle-même pour utiliser directement la variable
privée de type tableau redimensionné 'Arr'
Merci
Anacoluthe
« La connaissance est la seule chose qui s'accroît
lorsqu'on la partage. »
- Sacha BOUDJEMA
Joli exemple d'ADO :-) Tu as sans doute placé encore ton code spécifique Word dans LireXLFermeADO elle-même pour utiliser directement la variable privée de type tableau redimensionné 'Arr' Merci
Anacoluthe « La connaissance est la seule chose qui s'accroît lorsqu'on la partage. » - Sacha BOUDJEMA
Nemroth
Bonsoir Anacoluthe,
Je n'ai pas encore écrit le code pour gérer, mais c'est déjà un premier et grand pas de savoir comment récupérer les données. La suite sûrement ce week-end...
@+ Nemroth
Bonjour !
"Nemroth" nous a écrit ...
Voici mon problème : je n'en n'ai plus !!!
Joli exemple d'ADO :-) Tu as sans doute placé encore ton code spécifique Word dans LireXLFermeADO elle-même pour utiliser directement la variable privée de type tableau redimensionné 'Arr' Merci
Anacoluthe « La connaissance est la seule chose qui s'accroît lorsqu'on la partage. » - Sacha BOUDJEMA
-- Pour me répondre en BAL, retirer le nospam...
Bonsoir Anacoluthe,
Je n'ai pas encore écrit le code pour gérer, mais c'est déjà un premier et grand
pas de savoir comment récupérer les données. La suite sûrement ce week-end...
@+ Nemroth
Bonjour !
"Nemroth" nous a écrit ...
Voici mon problème : je n'en n'ai plus !!!
Joli exemple d'ADO :-)
Tu as sans doute placé encore ton code spécifique Word dans
LireXLFermeADO elle-même pour utiliser directement la variable
privée de type tableau redimensionné 'Arr'
Merci
Anacoluthe
« La connaissance est la seule chose qui s'accroît
lorsqu'on la partage. »
- Sacha BOUDJEMA
Je n'ai pas encore écrit le code pour gérer, mais c'est déjà un premier et grand pas de savoir comment récupérer les données. La suite sûrement ce week-end...
@+ Nemroth
Bonjour !
"Nemroth" nous a écrit ...
Voici mon problème : je n'en n'ai plus !!!
Joli exemple d'ADO :-) Tu as sans doute placé encore ton code spécifique Word dans LireXLFermeADO elle-même pour utiliser directement la variable privée de type tableau redimensionné 'Arr' Merci
Anacoluthe « La connaissance est la seule chose qui s'accroît lorsqu'on la partage. » - Sacha BOUDJEMA