Connection fichier fermé
Résolu
julia Namor
Messages postés
524
Date d'inscription
Statut
Membre
Dernière intervention
-
julia Namor Messages postés 524 Date d'inscription Statut Membre Dernière intervention -
julia Namor Messages postés 524 Date d'inscription Statut Membre Dernière intervention -
Bonjour chers amis
Quelqu'un aurait il sous le coude une fonction qui me permette de vérifier dans un fichier fermé "X " la présence d'une feuille "A" .Au cas échéant y coller des données , sinon créer la feuille "A" et y coller les données.
Et tout ça sans ouvrir le dit fichier "X" qui se trouve dans le meme répertoire que le fichier source "W" .
Je vous remercie de votre aide.
Cordialement
Quelqu'un aurait il sous le coude une fonction qui me permette de vérifier dans un fichier fermé "X " la présence d'une feuille "A" .Au cas échéant y coller des données , sinon créer la feuille "A" et y coller les données.
Et tout ça sans ouvrir le dit fichier "X" qui se trouve dans le meme répertoire que le fichier source "W" .
Je vous remercie de votre aide.
Cordialement
A voir également:
- Connection fichier fermé
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
8 réponses
Merci Patrice
Oui je connais bien ce site incontournable qui permet de se connecter dans un classeur fermé.
Mais dans mon cas , il ne s'agit pas d'une database access .
.
Cordialement
Oui je connais bien ce site incontournable qui permet de se connecter dans un classeur fermé.
Mais dans mon cas , il ne s'agit pas d'une database access .
.
Cordialement
Bonjour
J'obtiens l'erreur "erreur de compilation" sur la déclaration
Sinon je tente d'envoyer le fichier test mais le site ci-joint est visiblement non fonctionnel. Yaurai t il un autre moyen pour joindre le fichier?
Bien à vous
J'obtiens l'erreur "erreur de compilation" sur la déclaration
Dim ExcelCn As ADODB.Connection
Sinon je tente d'envoyer le fichier test mais le site ci-joint est visiblement non fonctionnel. Yaurai t il un autre moyen pour joindre le fichier?
Bien à vous
Bonjour
C'est possible mais compliqué et long si une feuille Excel est considéré comme une table de base de données : en plus de ADODB il faut utiliser ADOX (ADOX: gestion des métadonnées pour création de table ou absence de tables, champs, type de données...).
Il faut que le classeur X n'ait pas de mots de passe (classeur et feuilles) et que les feuilles soient organisées en liste de données; Les ent^tes ne doivent pas comporter d'espace ni de caractères accentués.
un exemple (XL2003) recherche table(feuille) SI A existe on liste les champs (ent^te)
si A n'existe pas il faut créer la liste de données (table): le plus facile est d'ouvrir ton fichier et de créer cette feuille avec les noms de champs sans espace ni caractère accentués. on ne fait cela qu'une fois. sinon on peut le faire avec ADOX (bonjour le boulot)
Ensuite pour insérer des données tu utilises "INSERT TO" avec une requête en SQL ou add.new si c'est une nouvelle ligne
Compte bien 2 jours de boulot avec les essais
C'est possible mais compliqué et long si une feuille Excel est considéré comme une table de base de données : en plus de ADODB il faut utiliser ADOX (ADOX: gestion des métadonnées pour création de table ou absence de tables, champs, type de données...).
Il faut que le classeur X n'ait pas de mots de passe (classeur et feuilles) et que les feuilles soient organisées en liste de données; Les ent^tes ne doivent pas comporter d'espace ni de caractères accentués.
un exemple (XL2003) recherche table(feuille) SI A existe on liste les champs (ent^te)
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = conn
' énumère les tables de la base commencant par "A"
For Each T_xxx In cat.Tables
If Left(T_xxx.Name, 1) = "A" Then
Msgbox "A existe"
End If
Next
si A n'existe pas il faut créer la liste de données (table): le plus facile est d'ouvrir ton fichier et de créer cette feuille avec les noms de champs sans espace ni caractère accentués. on ne fait cela qu'une fois. sinon on peut le faire avec ADOX (bonjour le boulot)
Ensuite pour insérer des données tu utilises "INSERT TO" avec une requête en SQL ou add.new si c'est une nouvelle ligne
Compte bien 2 jours de boulot avec les essais
Merci les gars
Une autre approche sur laquelle j'ai travaillé la semaine dernière mais qui me parait maintenant plus simple comparée à la méthode ADOX.
Le fichier X est créé dans un dossier situé dans le même répertoire puis la présence de la feuille A est testée avant d'engager l'ajout des données.
Je suis sure que ce fichier joint sera plus parlant que mes explications.
http://www.cjoint.com/c/FJgiOFZTSOA
Pourriez-vous me le sublimer?
Merci de votre aide
Une autre approche sur laquelle j'ai travaillé la semaine dernière mais qui me parait maintenant plus simple comparée à la méthode ADOX.
Le fichier X est créé dans un dossier situé dans le même répertoire puis la présence de la feuille A est testée avant d'engager l'ajout des données.
Je suis sure que ce fichier joint sera plus parlant que mes explications.
http://www.cjoint.com/c/FJgiOFZTSOA
Pourriez-vous me le sublimer?
Merci de votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
RE,
d'accord mais tu avais écris
Et tout ça sans ouvrir le dit fichier "X"
et dans le code que tu indiques, on a:
Set OutputFile = Workbooks.Open(fissa)
?????
Nota:Si tu as posé ton pb sur plusieurs forums, il est d'usage d'indiquer ceux ci dans ta demande
d'accord mais tu avais écris
Et tout ça sans ouvrir le dit fichier "X"
et dans le code que tu indiques, on a:
Set OutputFile = Workbooks.Open(fissa)
?????
Nota:Si tu as posé ton pb sur plusieurs forums, il est d'usage d'indiquer ceux ci dans ta demande
Oui Michel
Etant donné que la méthode adox qui peut me permettre de me connecter sans ouvrir la feuille est plutôt "compliquée" pour moi, j'ai ressorti celle-ci que j'avais débuté la semaine dernière.
Mais toujours est-il , si tu me proposes une solution ado (plus rapide et sans ouverture intempestive de feuille ) je suis vraiment preneuse.
Julia
Etant donné que la méthode adox qui peut me permettre de me connecter sans ouvrir la feuille est plutôt "compliquée" pour moi, j'ai ressorti celle-ci que j'avais débuté la semaine dernière.
Mais toujours est-il , si tu me proposes une solution ado (plus rapide et sans ouverture intempestive de feuille ) je suis vraiment preneuse.
Julia
re,
je t'avais écris que il y en avait pour 2 jours de boulot (peut-^tre 1,5 ou1) et là, on est loin du coup de main sur une difficulté qui est la raison des forums d'entraide...
Etant donné que la méthode adox qui peut me permettre de me connecter sans ouvrir la feuille est plutôt "compliquée" pour moi
pour se connecter, ce n'est pas ADOX mais ADO
ADOX est utilisé si tu as à construire ou décrire une base de données et ses tables (table= feuille A) la technique est identique que ce soit access ou excel (pas de clés primaires et étrangères avec excel). je t'ai indiqué les conditions: "noms de champs sans espace ni caractère accentués" Michel Tanguy-silkyroad a énoncé ces règles et d'autres sur DVP
tuto sur adox
https://vb.developpez.com/bidou/adox/
Mais si ton fichier X est unique pourquoi ne pas créer la feuille et ses ent^tes une bonne fois pour toutes ?
un exemple sur XL2000 le script de connexion change à partir de XL2007
Bon courage
Michel
je t'avais écris que il y en avait pour 2 jours de boulot (peut-^tre 1,5 ou1) et là, on est loin du coup de main sur une difficulté qui est la raison des forums d'entraide...
Etant donné que la méthode adox qui peut me permettre de me connecter sans ouvrir la feuille est plutôt "compliquée" pour moi
pour se connecter, ce n'est pas ADOX mais ADO
ADOX est utilisé si tu as à construire ou décrire une base de données et ses tables (table= feuille A) la technique est identique que ce soit access ou excel (pas de clés primaires et étrangères avec excel). je t'ai indiqué les conditions: "noms de champs sans espace ni caractère accentués" Michel Tanguy-silkyroad a énoncé ces règles et d'autres sur DVP
tuto sur adox
https://vb.developpez.com/bidou/adox/
Mais si ton fichier X est unique pourquoi ne pas créer la feuille et ses ent^tes une bonne fois pour toutes ?
un exemple sur XL2000 le script de connexion change à partir de XL2007
Sub ecrire_db_fermé()
'écrit enregistrements dans une table de base de données "db_ecrire"
' Michel_M, modifié en septembre 04
Dim source As ADODB.Connection
Dim externe As ADODB.Recordset
Dim fichier As String, texte_SQL As String
Dim valeur0 As Variant
Dim valeur1 As Variant
'teste si le classeur source est fermé
If FichOuvert("fermé_ado.xls") = True Then
MsgBox "Pour que l'opération demandée soit effectuée," & vbCr & _
"Le classeur ""fermé_ado.xls"" doit être fermé ", vbCritical
Exit Sub
End If
' affecte la valeur à écrire dans fermé.xls
'nota: penser à exclusion si valeurX est vide
valeur0 = Range("J2").Value
valeur1 = Range("K2").Value
' connecte à la database "source" dans le classeur excel fermé
fichier = ActiveWorkbook.Path & "\fermé_ado.xls"
Set source = New ADODB.Connection ' ADAPTER SI>= XL2007
source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""
' travail demandé: insère dans le champ "report" de "db_ecrire" (cellules nommées) la valeur de "J2 et K2,"
texte_SQL = "INSERT INTO db_ecrire (champ0,champ1) VALUES ('" & (valeur0) & "','" & (valeur1) & "')"
' éxécute le travail demandé
Set externe = New ADODB.Recordset
Set externe = source.Execute(texte_SQL)
source.Close
MsgBox " opération terminée"
End Sub
Bon courage
Michel