classeurs fermés avec noms variables

Le
wafwaf
Bonjour à tous,j'éspère que je vais pouvoir trouver de l'aide au plus vite puisque ça urge;voici mon problème:j'essai de me connecter à un classeur excel sans l'ouvrir pour récupérer son contenu et le copier dans mon classeur resultat,ensuite je vais appliquer une serie de calcul sur ces données.jusque là c'est bon,là ou ça bloque c'est au niveau du nom de mon fichier puisqu'il est de la forme "machin_S 01.xls",il y a autant de fichier que de nombre de semaines(même structure) et l'utilisateur choisi d'abord la semaine voulue dans une liste deroulante et à partir de là la macro se connecte à ce fichier et récupère son contenu.si j'indique le chemin complet de l'un des fichier dans ma macro tout se passe bien et la copie se fait normalement mais si j'essaie de le faire de manière dynamique(former le chemin à partir du n° sem choisit) il me dit qu'il ne retrouve pas les feuilles dedans(par exemple,dans le fichier machin_S01" contient 4 feuilles:fe1,fe2,fe3,fe4. il me sort l'erreur suivante:le moteur de la base de donnée Microsoft Jet n'a pas pu trouver l'objet 'fe1$',assurez vous que l'objet existe.Voilà comment j'ai essayé de former le chemin:
rep = "D:SUIVI QUALI" 'le repertoire contenant le classeur principal et les autres classeurs à ouvrir
out = ActiveWorkbook.Name
Windows(out).Activate
Sheets("check CC").Select
pref1 = Range("L7").Value 'le n° de la semaine choisi est stocké dans cette cellule
nomEx1 = "fe_" & pref1 & ".xls"
Fich1 = Dir(rep & nomEx1)
If (Fich1 = "") Then
MsgBox ("Le fichier source " & Fich1 & " est introuvable,veuillez vérifier son emplacement SVP!")
Else
..
j'utilisais déjà ce traitement dans d'autres projets et ça marchait nickel,j'ai définit les feuilles sources et les feuilles destination et j'utilise la syntaxe suivante pour réaliser la cnx et la copie à partir des fichiers fermés.
ConsoDatas Fich1, Source1, Cible1 'ces instructions sont placées aprés le else
ConsoDatas Fich2, Source2, Cible1

''et voici la ft que j'utilise pour ça

Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données
'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible
'du classeur actif, à la suite des données (éventuellement) déjà présentes.
'(La ligne d'entêtes de FeuilleSource n'est pas importée)
'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
Dim Li&, FeuilleDest

''' 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.
szSQL = "SELECT * FROM [" & FeuilleSource & "$];"

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

'où envoyer les données :
Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1
'envoi sur la première ligne vide
If Not rsData.EOF Then
FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
Else
'si la source était vide
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

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

End Sub

en faisant certains tests j'ai compris la cause de ce problem:en fait le système est positionné sur le classeur principal c'est pour cette raison qu'il ne retrouve pas la feuille désirée,c'est normal puisque je manipule un classeur fermé et je veux conserver ce mode mais apparement rien n'y fait.quelqu'un peut m'aider à ce sujet?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #19264281
Bonjour.
En clair, quel est le message d'erreur, à quel niveau, quelle est la
variable en erreur, quelle est la valeur de fe1$ et quelle devrait-elle
être ?
Un peu au hasard :
pref1 = Format(Range("L7").Value, "00")
si le n° de semaine est toujours à 2 chiffres.
Cordialement.
Daniel

Bonjour à tous,j'éspère que je vais pouvoir trouver de l'aide au plus vite
puisque ça urge;voici mon problème:j'essai de me connecter à un classeur
excel sans l'ouvrir pour récupérer son contenu et le copier dans mon classeur
resultat,ensuite je vais appliquer une serie de calcul sur ces données.jusque
là c'est bon,là ou ça bloque c'est au niveau du nom de mon fichier puisqu'il
est de la forme "machin_S 01.xls",il y a autant de fichier que de nombre de
semaines(même structure) et l'utilisateur choisi d'abord la semaine voulue
dans une liste deroulante et à partir de là la macro se connecte à ce fichier
et récupère son contenu.si j'indique le chemin complet de l'un des fichier
dans ma macro tout se passe bien et la copie se fait normalement mais si
j'essaie de le faire de manière dynamique(former le chemin à partir du n° sem
choisit) il me dit qu'il ne retrouve pas les feuilles dedans(par exemple,dans
le fichier machin_S01" contient 4 feuilles:fe1,fe2,fe3,fe4. il me sort
l'erreur suivante:le moteur de la base de donnée Microsoft Jet n'a pas pu
trouver l'objet 'fe1$',assurez vous que l'objet existe.Voilà comment j'ai
essayé de former le chemin:
rep = "D:SUIVI QUALI" 'le repertoire contenant le classeur principal et les
autres classeurs à ouvrir
out = ActiveWorkbook.Name
Windows(out).Activate
Sheets("check CC").Select
pref1 = Range("L7").Value 'le n° de la semaine choisi est stocké dans cette
cellule
nomEx1 = "fe_" & pref1 & ".xls"
Fich1 = Dir(rep & nomEx1)
If (Fich1 = "") Then
MsgBox ("Le fichier source " & Fich1 & " est introuvable,veuillez vérifier
son emplacement SVP!")
Else
....
j'utilisais déjà ce traitement dans d'autres projets et ça marchait
nickel,j'ai définit les feuilles sources et les feuilles destination et
j'utilise la syntaxe suivante pour réaliser la cnx et la copie à partir des
fichiers fermés. ConsoDatas Fich1, Source1, Cible1 'ces instructions sont
placées aprés le else
ConsoDatas Fich2, Source2, Cible1

''et voici la ft que j'utilise pour ça

Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$)
'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données
'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible
'du classeur actif, à la suite des données (éventuellement) déjà présentes.
'(La ligne d'entêtes de FeuilleSource n'est pas importée)
'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
Dim Li&, FeuilleDest

''' 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.
szSQL = "SELECT * FROM [" & FeuilleSource & "$];"

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

'où envoyer les données :
Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1
'envoi sur la première ligne vide
If Not rsData.EOF Then
FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
Else
'si la source était vide...
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If

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

End Sub

en faisant certains tests j'ai compris la cause de ce problem:en fait le
système est positionné sur le classeur principal c'est pour cette raison
qu'il ne retrouve pas la feuille désirée,c'est normal puisque je manipule un
classeur fermé et je veux conserver ce mode mais apparement rien n'y
fait.quelqu'un peut m'aider à ce sujet?


Publicité
Poster une réponse
Anonyme