Transférer des données entre deux classeurs fermés

degap05

XLDnaute Impliqué
Bonjour, en référence à la macro citée dans le titre, de "Michelxld le 10.02.2006"


Cela fonctionne parfaitement avec mes classeurs.

J'aimerais savoir s'il était possible d'écraser les données existantes afin de ne pas ajouter la totalité à chaque fois.

Merci d'avance.
 
Dernière édition:

degap05

XLDnaute Impliqué
Re : Transférer des données entre deux classeurs fermés

Voici le fichier de MichelXLD
 

Pièces jointes

  • transfertClasseursFermes.zip
    18.6 KB · Affichages: 60
  • transfertClasseursFermes.zip
    18.6 KB · Affichages: 61
  • transfertClasseursFermes.zip
    18.6 KB · Affichages: 64
Dernière édition:

degap05

XLDnaute Impliqué
Re : Transférer des données entre deux classeurs fermés

Bonjour,

Si vous pensez pouvoir m'aider, voici le code qui permet, à partir du classeur requête de récupérer les données dans le classeur source pour les envoyer dans le classeur cible. Ce code fonctionne parfaitement, mais à chaque requête c'est la totalité des données qui s'ajoutent en dessous. Donc il n'écrase pas les données précédentes ce qui est gênant pour ce que j'envisage (une sorte d'actualisation des données à chaque requête). Les classeurs mentionnés se trouvent dans le fichier joint de mon précédent message.

Option Explicit

'"ClasseurFermeSource.xls"
'toutes les données de la Feuil1 sont récuperees dans la requete
'----------------------------------------------------------------

'ClasseurFermeDestination.xls .
'les données recuperees sont ajoutées a la suite des enregistrements existants "
'Le classeur contenant la macro et les 2 classeurs fermés sont dans le meme repertoire

Sub tranfertEntreClasseursFermes()
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
'------------------------------------------------------------------
' "classeurFermeSource.xls" est le classeur source
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\MDSH.xls;" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""
'les donnees sources sont dans la Feuil1 du classeur "classeurFermeSource.xls"

oProdRS.Open "SELECT * FROM [Ordonnancier$]", Cn, adOpenStatic


'------------------------------------------------------------------
' "classeurFermeDestination.xls" est le classeur destination
Set oConn = New ADODB.Connection
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\T2A.xls;" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

'les donnees sont à placer dans la Feuil1 du classeur "classeurFermeDestination.xls"
Set oRS = New ADODB.Recordset
oRS.Open "Select * from [T2A$]", oConn, adOpenKeyset, adLockOptimistic

Ce code est beaucoup trop complexe pour mes minuscules compétences:eek:, c'est pourquoi je sollicite votre aide.

Merci.
 

MichelXld

XLDnaute Barbatruc
Re : Transférer des données entre deux classeurs fermés

bonjour


Dans ce cas tu peux essayer de supprimer préalablement le contenu de la feuille:

En utilisant la bibliothèque "Microsoft ActiveX Data Objects 2.x Library":

Code:
Sub EffacerContenuFeuille_ClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Fichier As String
 
    Fichier = "C:\dossier\NomClasseur.xls"
 
    Set Cn = New ADODB.Connection
    With Cn
        .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
        .Execute "DROP TABLE [Feuil1$]"
        .Close
    End With
 
    Set Cn = Nothing
End Sub



En utilisant la bibliothèque "Microsoft ADO Ext. 2.x for DDL and Security":

Code:
Sub EffacerContenuFeuille_ClasseurFerme_V02()
    Dim Cat As ADOX.Catalog
    Dim Fichier As String
 
    Fichier = "C:\dossier\NomClasseur.xls"
 
    Set Cat = New ADOX.Catalog
    Cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
    Cat.Tables.Delete ("Feuil1$")
 
    Set Cat = Nothing
End Sub


Il existe sans doute une méthode ADO pour écraser directement les données mais je ne suis pas un spécialiste dans ce domaine:

Comprendre les Recordset ADO - Club d'entraide des développeurs francophones

Utiliser le modèle ADOX avec Visual Basic - Club d'entraide des développeurs francophones



Bonne journée
MichelXld
 

kiki29

XLDnaute Barbatruc
Re : Transférer des données entre deux classeurs fermés

Salut, un échantillon retrouvé dans les décombres de mon PC,à adapter, en espérant avoir compris ta demande

PS : En fait il exporte une ligne ( la 5eme ) dans un fichier fermé que l'on sélectionne,je laisse l'échantillon même si je viens de me rendre qu'il ne correspond pas exactement à ta demande
 

Pièces jointes

  • ADO.zip
    14.1 KB · Affichages: 54
  • ADO.zip
    14.1 KB · Affichages: 57
  • ADO.zip
    14.1 KB · Affichages: 54
Dernière édition:

degap05

XLDnaute Impliqué
Re : Transférer des données entre deux classeurs fermés

Bonjour, merci kiki29 et MichelXld,

Kiki29, en effet ton offre ne correspond pas à ma demande, mais je te remercie quand même.

MichelXld, j'ai créé un bouton sur la feuille requête, pour effacer les données de la feuille destination, avant d'exécuter la requête, mais cela n'a pas fonctionné (blocage).

Penses-tu que la commande pourrait être intégrée au code principal (mon message du 14/03/2008) ?

Merci de votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 163
Messages
2 085 860
Membres
103 006
dernier inscrit
blkevin