Connection fichier fermé

Résolu/Fermé
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 - 5 oct. 2016 à 18:11
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 - 6 oct. 2016 à 15:00
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




A voir également:

8 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
5 oct. 2016 à 19:13
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
5 oct. 2016 à 21:07
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
6 oct. 2016 à 01:07
et l'ajout de feuille n'est-il pas réalisable par cette méthode ?
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
6 oct. 2016 à 09:07
Bonjour

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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 6/10/2016 à 10:19
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)
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
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
6 oct. 2016 à 10:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 oct. 2016 à 11:00
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


0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
6 oct. 2016 à 11:07
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 6/10/2016 à 14:05
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
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
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
6 oct. 2016 à 15:00
Merci de ton aide Michel

Sinon par rapport au fichier que j'ai envoyé , qu'est ce qu'il est possible de faire pour le corriger?
Julia
0