OVH Cloud OVH Cloud

ADO méthode

6 réponses
Avatar
poy-poy
Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:\ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub

6 réponses

Avatar
poy-poy
Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub




Avatar
Pierre CFI [mvp]
tu as essayé en enregistrant une macro ?

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"poy-poy" a écrit dans le message de news:
Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub






Avatar
michdenis
Bonjour Poy-Poy,

Pour avoir la ligne de titre de la plage de cellules, tu dois définir ta chaine de connection comme ceci :


Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"HDR=No"

"HDR=No" No = pas de ligne d'étiquette
"HDR=Yes" Yes = Ligne d'étiquette

P.S. Et si tu avais le bonheur d'avoir le programme "Visual Basic" d'installer sur ta machine, tu pourrais à partir des
outils supplémentaires de la barre d'outils "contrôle" ajouter un contrôle du nom de : "Microsoft ADO Control Data,
Version 6.0 Oleb . L'avantage est que tu peux à partir des propriétés de ce contrôle généré des fenêtres ... et en
répondant à ces dernières, cela génère les chaînes de commande sans avoir besoin des saisir à la mimine ! Évidemment, il
est possible de tout récupérer la valeur de ces propriétés en VBA.

Attention, il ne faut pas le dire à tout le monde !


Salutations!




"poy-poy" a écrit dans le message de news:

Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub




Avatar
poy-poy
Euhhh ?

Moi, je ne sais pas travaillé (hors vba sur un fichier fermé !). Donc je
pourrais enregistré toutes les macros que je veux, cela me donnera pas ce que
je veux.

Mais s'il existe une technique je serais ravi de l'apprendre.

Cordialement
Benjamin


tu as essayé en enregistrant une macro ?

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"poy-poy" a écrit dans le message de news:
Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub











Avatar
poy-poy
Merci,

Dans le classeur que j'avais rcupéré, Frederic passé par un titre qu'il
récupéré colonne par colonne. C'était un peu plus lent. Je vais de ce pas
transformé ceci.
Malheureusement pour moi, Vb n'est pas installé et je ne crois pas que ce
soit à l'ordre du jour, enfin je me débrouillerais avec les codes déjà fait !

Cordialement
benjamin


Bonjour Poy-Poy,

Pour avoir la ligne de titre de la plage de cellules, tu dois définir ta chaine de connection comme ceci :


Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"HDR=No"

"HDR=No" No = pas de ligne d'étiquette
"HDR=Yes" Yes = Ligne d'étiquette

P.S. Et si tu avais le bonheur d'avoir le programme "Visual Basic" d'installer sur ta machine, tu pourrais à partir des
outils supplémentaires de la barre d'outils "contrôle" ajouter un contrôle du nom de : "Microsoft ADO Control Data,
Version 6.0 Oleb . L'avantage est que tu peux à partir des propriétés de ce contrôle généré des fenêtres ... et en
répondant à ces dernières, cela génère les chaînes de commande sans avoir besoin des saisir à la mimine ! Évidemment, il
est possible de tout récupérer la valeur de ces propriétés en VBA.

Attention, il ne faut pas le dire à tout le monde !


Salutations!




"poy-poy" a écrit dans le message de news:

Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub









Avatar
poy-poy
ReBonjour,

Je viens de faire les modifiactions. Il se passe quelquechose de surprenant,
Je veux récupérer la plage A1:B30000. Il récupère toutes les données en
dessous de la ligne 1, mais seulement une partie des données de la ligne 1.

J'ai essayé avec moins de données, A1:B1000 pareil. C'est toujours la même
partie qu'il récupère, mais je ne vois pas ce qui la caractrise, vu que tous
les titres sont des textes; Qu'il récupère une partie des textes longs et une
partie des textes courts; Que se ne sont pas que des colonnes les une à coté
des autres...

J'ai controuné le problème en faisant de record set, un premier sur toute la
plage et un 2nd juste sur la ligne 1 qui alors marche impeccable.

Je serais curieux de savoir pourquoi cela me fait ceci.

Cordialement
Benjamin


Bonjour Poy-Poy,

Pour avoir la ligne de titre de la plage de cellules, tu dois définir ta chaine de connection comme ceci :


Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"HDR=No"

"HDR=No" No = pas de ligne d'étiquette
"HDR=Yes" Yes = Ligne d'étiquette

P.S. Et si tu avais le bonheur d'avoir le programme "Visual Basic" d'installer sur ta machine, tu pourrais à partir des
outils supplémentaires de la barre d'outils "contrôle" ajouter un contrôle du nom de : "Microsoft ADO Control Data,
Version 6.0 Oleb . L'avantage est que tu peux à partir des propriétés de ce contrôle généré des fenêtres ... et en
répondant à ces dernières, cela génère les chaînes de commande sans avoir besoin des saisir à la mimine ! Évidemment, il
est possible de tout récupérer la valeur de ces propriétés en VBA.

Attention, il ne faut pas le dire à tout le monde !


Salutations!




"poy-poy" a écrit dans le message de news:

Salut,

J'ai trouvé pourquoi je n'obtenais pas la première ligne, c'est parcequ'elle
est considéré comme une ligne de titre, j'ai trouvé dans un autre classeur de
frederic (j'aime bien son site:-) comment la récupérer.

Par contre, je suis toujours obligé de passer par une feuille intermédiaire
pour mon TCD. Alors qu'il existe certainement une technique pour lui mettre
directement les données en source...

Cordialement
Benjamin




Bonjour,

J'essaie d'utiliser le code de Frederic Sigonneau pour importer une feuille
entière à partir d'un classeur fermé. Je souhaiterais ensuite me servir des
données obtenues comme source d'un pivottable.

Je coince à 2 endroits. Premièrement le code me copie la feuille sans la
première ligne !! Deuxièmement, je n'arrive pas à mettre directement en
source de mon pivot les données obtenues. Je pensais remplacer
Feuil1.Range("A1").CopyFromRecordset rsData
par
ActiveSheet.PivotTableWizard SourceType:=xlexternal, SourceData:= rsdata
Mais cela ne marche pas...

Pourriez vous me donner un coup de main ? C'est la première fois que
j'utilise ADO donc je suis un peu perdu qui plus est.

Cordialement
Benjamin


Le code de Frederic :

Sub testQuery()
fich$ = "D:ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"

' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing

End Sub