Rechercher : dans
Par :

VBA Excel mise à jour fichier sans l'ouvrir

Dernière réponse le 3 jun 2009 à 16:55:50 Rochelle13, le 20 fév 2009 à 08:53:30 
 Signaler ce message aux modérateurs

Bonjour,

J'ai actuellement 2 fichiers excel qui ont des intitulés de colonne identiques. Le premier est une extraction d'une application autre qu'excel et le second un fichier avec macro VBA Classique.

Ma demande : y'a-t-il une astuce pour copier les lignes du premier fichier vers le second sans ouvrir les fichiers, et cela, tous les matins à la même heure?

Je vous remercie par avance de l'attention que vous porterez à ma question!

Meilleures réponses pour « VBA Excel mise à jour fichier sans l'ouvrir » dans :
[Windows/Corbeille] Supprimer un fichier sans confirmation VoirVous en avez assez de vider continuellement votre corbeille ? Il est possible de supprimer les fichiers sans passer par la corbeille de deux façons différentes : Méthode manuelle Méthode automatique Méthode manuelle Pour ne plus avoir à...
Fichier utilisé - Le fichier est ouvert dans un autre programme VoirLorsque vous souhaitez supprimer ou déplacer un fichier, Windows se plaint avec le message suivant : Fichier utilisé Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme Fermez l'application concernée Avant...

1

lermite222, le 20 fév 2009 à 09:21:09

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+ L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

2

Rochelle13, le 20 fév 2009 à 10:33:26

Oui désolée j'ai oublié de préciser.

Mon deuxième fichier est un fichier Excel.

Min premier fichier a un format : Microsoft Office Excel Comma Separated Values File

Est ce que ces informations suffisent?

Répondre à Rochelle13

3

lermite222, le 20 fév 2009 à 11:18:01

Microsoft Office Excel Comma Separated Values File ?
Quel version d'excel ?
L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

4

Rochelle13, le 20 fév 2009 à 15:00:59

La version d'Excel : Excel 2003.

Pour le format que j'ai donné (Microsoft Office Excel Comma Separated Values File), c'est ce qui est écrit dans "type de fichier" lorsque je fais propriété du fichier.

Répondre à Rochelle13

5

Polux31, le 20 fév 2009 à 20:42:45
  • +1

Bonjour,

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) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

6

lermite222, le 21 fév 2009 à 07:57:20

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+ L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

8

Polux31, le 21 fév 2009 à 09:49:07
  • +2

Bonjour lermite,

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)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

7

michel_m, le 21 fév 2009 à 09:16:14

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.

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
Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

9

michel_m, le 21 fév 2009 à 10:30:16
  • +1

Pour modifier un enregistrement dans un classeur fermé j'ai trouvé ceci
sur DVP.com AUTEUR: Silkyroad
http://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 & "'"

Le forum est basé sur le partage de connaissances:Je ne réponds donc pas à des questions techniques par message privé.
Cordialement, Michel

Répondre à michel_m

11

lermite222, le 21 fév 2009 à 12:15:51

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+ L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

12

Polux31, le 22 fév 2009 à 10:51:38

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) «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

14

 baatanass, le 3 jun 2009 à 16:55:50

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

Répondre à baatanass