A voir également:
- Actualiser un fichier excel sans l'ouvrir
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Ouvrir un fichier .dat - Guide
- Comment ouvrir un fichier docx ? - Guide
- Comment ouvrir un fichier 7z - Guide
8 réponses
Bonjour,
Tu peux utiliser une connexion ADO pour lire ou ecrire dans un fichier Excel fermé.
;o)
Tu peux utiliser une connexion ADO pour lire ou ecrire dans un fichier Excel fermé.
Sub ADOcnx_XL_Close() 'Cochez la ligne "Microsoft ActiveX Data Objects x.x Library". 'dans Outils > Références... Dim Cnx As ADODB.Connection Dim Fichier As String 'Définit le classeur fermé servant de base de données (mettre le chemin complet) Fichier = "C:\monClasseur.xls" Set Cnx = New ADODB.Connection '--- Connexion --- With Cnx .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open End With 'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002. ' '... la requête ... ' '--- Fermeture connexion --- Cnx.Close Set Cn = Nothing End Sub
;o)
bonjour,
il y aura toujours un fichier ouvert: celui où il y a la macro de commznde... donc, je suggèrerais d'effectuer une lecture simple du fichier "source" vers le 2° où il il ya déjà du VBA
vous pourrez trouver ci joint exemples de liaisons office (excel-access-word) en technologie ADO avec lecture-écriture dans un excel fermé...fichier de commande: home_ado.xls
http://www.cijoint.fr/cjlink.php?file=cj200902/cijpjc7JtG.zip
(depuis pas mal de choses se sont améliorées)
toutefois, par rapport à cette démo, on peut éviter d'avoir à cocher la référence ADO dans les références
ce qui évite de param^trer chaque ordi.
HDR=NO est utilisé quand il n'y a pas d'étiquettes (ou nom de champ), si tel est le cas, il faut préciser l'onglet- feuille et la plage de cellule par exemple:
non précisé ADO cherchera les étiquettes (HDR=Header)
Quelquesoit la version WIN-office utilisée laisser extended properties à 8.0; ADO comprendra dans des versions postérieures...
Je tiens à citer
http://frederic.sigonneau.free.fr/
site incontournable pour tout excelien accro!
Maintenant, si tu n'as pas beaucoup de données-cellules à transfèrer tu pêux utiliser la macro dite de Walkenbach sans faire appel à ADO
autre exemple (le nom de fichier était dans un combobox):
mais il faut soit boucler, soit écrire autant de lignes qu'il y a de cellules
il y aura toujours un fichier ouvert: celui où il y a la macro de commznde... donc, je suggèrerais d'effectuer une lecture simple du fichier "source" vers le 2° où il il ya déjà du VBA
vous pourrez trouver ci joint exemples de liaisons office (excel-access-word) en technologie ADO avec lecture-écriture dans un excel fermé...fichier de commande: home_ado.xls
http://www.cijoint.fr/cjlink.php?file=cj200902/cijpjc7JtG.zip
(depuis pas mal de choses se sont améliorées)
toutefois, par rapport à cette démo, on peut éviter d'avoir à cocher la référence ADO dans les références
ce qui évite de param^trer chaque ordi.
dim source as object dim requete as object 'chemin et fichier sont ici des variables globales venant d'ailleurs Set Source = CreateObject("ADODB.Connection") Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";" Set Requete = CreateObject("ADODB.Recordset") .... requete.close source.close set requete=nothing set source=nothing
HDR=NO est utilisé quand il n'y a pas d'étiquettes (ou nom de champ), si tel est le cas, il faut préciser l'onglet- feuille et la plage de cellule par exemple:
Set requete = source.Execute("SELECT * FROM `" & onglet & "$" & zone & "` WHERE '" & champ & "' <>"""";")
non précisé ADO cherchera les étiquettes (HDR=Header)
Quelquesoit la version WIN-office utilisée laisser extended properties à 8.0; ADO comprendra dans des versions postérieures...
Je tiens à citer
http://frederic.sigonneau.free.fr/
site incontournable pour tout excelien accro!
Maintenant, si tu n'as pas beaucoup de données-cellules à transfèrer tu pêux utiliser la macro dite de Walkenbach sans faire appel à ADO
autre exemple (le nom de fichier était dans un combobox):
' modèle pour écrire param='C:\mes documents\riri\[Classeur1.xls]Classeur1Feuil3'!L1C1 param = "'" & chemin & "\[" & Me.CbxClasseur.Value & "]" & onglet & "'!R1C1" ' macro dite de John Walkenbach champ = ExecuteExcel4Macro(param)
mais il faut soit boucler, soit écrire autant de lignes qu'il y a de cellules
Pour modifier un enregistrement dans un classeur fermé j'ai trouvé ceci
sur DVP.com AUTEUR: Silkyroad
https://silkyroad.developpez.com/VBA/ClasseursFermes/#LIV-B
'Met à jour la valeur du "Champ4" si le "Champ2" correspond à la variable "leNom"
strSQL = "UPDATE [" & Feuille & "$] SET " & _
"Champ4 = " & PrixUnit & " WHERE Champ2 = '" & leNom & "'"
sur DVP.com AUTEUR: Silkyroad
https://silkyroad.developpez.com/VBA/ClasseursFermes/#LIV-B
'Met à jour la valeur du "Champ4" si le "Champ2" correspond à la variable "leNom"
strSQL = "UPDATE [" & Feuille & "$] SET " & _
"Champ4 = " & PrixUnit & " WHERE Champ2 = '" & leNom & "'"
Bonjour,
Ca dépend de ton 1er fichier, quel est sa provenance, sont type ? c'est un calsseur excel ?
Donne des explications plus détaillées
A+
Ca dépend de ton 1er fichier, quel est sa provenance, sont type ? c'est un calsseur excel ?
Donne des explications plus détaillées
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Polux,
Ca m'intérèsserais de savoir comment écrire dans le classeur fermer :-)
a) Remplacer une ligne.
b) Ajouter après la dernière ligne.
A la place ou tu a mis .. la requête
Merci d'avance.
A+
Ca m'intérèsserais de savoir comment écrire dans le classeur fermer :-)
a) Remplacer une ligne.
b) Ajouter après la dernière ligne.
A la place ou tu a mis .. la requête
Merci d'avance.
A+
Bonjour lermite,
Voilà un exemple pour ajouter une ligne
On peut également modifier une donnée dans une cellule selon un critère. La requête aurait cette forme :
;o)
Voilà un exemple pour ajouter une ligne
Sub InsertRecord(ByVal nom As String, Byval prenom As String, ByVal age As Integer) Dim Cnx As ADODB.Connection Dim Fichier As String, Feuille As String, strSQL As String Fichier = "C:\maBase.xls" 'chemin complet du fichier fermé Feuille = "Adhérants" 'Onglet où les données doivent être insérées Set Cnx = New ADODB.Connection With Cnx .Provider = "MSDASQL" .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & Fichier & "; ReadOnly=False;" .Open End With 'Les données doivent être indiquées dans le même ordre que les champs dans la base de données. strSQL = "INSERT INTO [" & Feuille & "$] " _ & "VALUES ( '" & nom "', '" & prenom & "', " & age & ")" Cnx.Execute strSQL Cnx.Close Set Cnx = Nothing End Sub
On peut également modifier une donnée dans une cellule selon un critère. La requête aurait cette forme :
strSQL = "UPDATE [" & Feuille & "$] SET " & _ "Champ4 = " & age & " WHERE Champ2 = '" & nom & "'"
;o)
Polux, Michel, Merci pour tout ces exemples.
J'avais déja trouver pour lire mais je ne parvenais pas à écrire dans le classeur fermer.
J'ai aussi trouver le dernier lien donné par Michel mais je ne voulais pas encore mélanger ADO et SQL, une chose à la fois :-)
Encore merci à vous deux.
A+
J'avais déja trouver pour lire mais je ne parvenais pas à écrire dans le classeur fermer.
J'ai aussi trouver le dernier lien donné par Michel mais je ne voulais pas encore mélanger ADO et SQL, une chose à la fois :-)
Encore merci à vous deux.
A+
Bonjour lermite,
De rien, c'est aussi en m'aidant du lien donné par Michel que je me suis fait un module permettant de lire et écrire dans un classeur fermé. Il faut néanmoins que le classeur fermé soit cohérent. Par exemple, pas de cellules fusionnées, les données insérées doivent être du même type que le format des cellules du classeur fermé etc ...
Bon dimanche.
;o)
De rien, c'est aussi en m'aidant du lien donné par Michel que je me suis fait un module permettant de lire et écrire dans un classeur fermé. Il faut néanmoins que le classeur fermé soit cohérent. Par exemple, pas de cellules fusionnées, les données insérées doivent être du même type que le format des cellules du classeur fermé etc ...
Bon dimanche.
;o)
boujour tous ,
j'ai un classeur qui contient plusieur feuille et je veux chaque feuille contient un ou plusier tableaux et je veux selectioné un champ par exemple "B9" dans la feuille "productionjour" et l'affiché dans une interface que j'ai la créer moi meme avec vb 6 si quelqu'un peut me donné la procedure je serai reconnaissant
j'ai un classeur qui contient plusieur feuille et je veux chaque feuille contient un ou plusier tableaux et je veux selectioné un champ par exemple "B9" dans la feuille "productionjour" et l'affiché dans une interface que j'ai la créer moi meme avec vb 6 si quelqu'un peut me donné la procedure je serai reconnaissant
Bonjour,
Je n'arrive pas à utiliser les références ADO elles ne sont peut-être pas activer sur mon poste et je ne trouve pas comment le faire
Il y a écrit dans les références du projet et de cocher la case réference ADO mais aucun moyen de le trouver.
Merci pour votre aide
Bonjour,
Coche la référence :
Microsoft ActiveX Data Objects x.x
Daniel