copie d'un fichier fermé marche une fois sur deux

jasol

XLDnaute Nouveau
Bonjour à tous,

J'avais déjà fait appel au forum pour réaliser un code vba pour lire un fichier partagé fermé. Je souhaitais que les certaines plages du fichier fermé soit copier dans un fichier partagé ouvert. Voici le code :

#Private Sub CommandButton1_Click()
Dim Source As Object, Requete As Object
Dim Onglet As String, Plage As String, fichier As String
Dim Texte_SQL As Stringfichier = "\\172.21.253.201\Commun\2012\Mars.xls"
Onglet = "m"
Plage = "H6:S10000"

Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

'exerce la requete ADO sur les donnée à recopier
Texte_SQL = "SELECT * FROM [" & Onglet & "$" & Plage & "]"
Set Requete = CreateObject("ADODB.Recordset")
Set Requete = Source.Execute(Texte_SQL)

Sheets("Mars").Range("Z6").CopyFromRecordset Requete

'libère les pointeurs
Set Requete = Nothing
Set Source = Nothing#

Ce code marche mais pas à chaque fois, dès fois le code copiera toutes mes plages, d'autres fois il n'en m'en prendra que quelques cellules de la plage que je lui ai défini

Quelqu'un pourrait-il m'aider?
 

mephis

XLDnaute Occasionnel
Re : copie d'un fichier fermé marche une fois sur deux

Bonjour, je peux t'aider mais par contre pas avec ton code:

Essai celui ci et tu me redi

Dim DernLigne As Long

Classeur = Application.GetOpenFilename("Classeurs Excel,*.xls")
If Classeur = False Then Exit Sub
Workbooks.Open Filename:=Classeur

DernLigne = Range("A65536").End(xlUp).Row
Range("...").Select 'tu met la sélection qui te plait

Selection.Copy
ActiveWorkbook.Close
Windows("Nom de ta feuille").Activate tu met le nom de ton classeur actif, pas celui que tu souhaites ouvrir
Range("A1").Select
ActiveSheet.Paste
 

jasol

XLDnaute Nouveau
Re : copie d'un fichier fermé marche une fois sur deux

Merci de cette réponse, le code marche plutot bien mais cela n'est pas assez ergonomique pour ce que je veux en faire. Les deux fichiers ne sont pas du tout dans le même repertoire et la copie des données se fait des dizaines de fois dans la journée donc c'est embetant d'aller chercher le fichier à chaque fois. Néanmoins, cette méthode est très simple d'utilisation, je vous en remercie. Mais si vous pouvez m'aider à améliorer mon code ca serait vraiment génial parce que dans ce cas, le fichier excel ouvert va chercher de lui même le fichier fermé pour copier dedans.
 

Vorens

XLDnaute Occasionnel
Re : copie d'un fichier fermé marche une fois sur deux

Hello,


Une proposition sans ouvrir le classeur

Je te propose une autre syntaxe pour une requête OLEDB que personnellement j'utilise et qui fonctionne à 100%.

Code:
'Attribution des valeurs au variable

TabSource = "oNGLET1$"  'NE PAS OUBLIER LE $
PathImportCata2 = "C:\temp\Monfichier.xls"

'Connection au classeur

    Set Cn = New ADODB.Connection
    
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & PathImportCata2 & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
            .Open
        End With

Set Rst = Cn.Execute("select * FROM `" & PathImportCata2 & "`.`" & TabSource & "` `REQ$`")


'Soit on copie le résultat dans un Array pour y effectuer des traitement

TableauTotal = Rst.GetRows

'Soit on copie le tableau dnas un onglet


Workbooks("Tonfichiercible").Sheets("Onlet2").Range("A2").CopyFromRecordset Rst


        Cn.Close
        Set Cn = Nothing

Si dessous une autre requête qui n'importe qu'une colonne définie (Juste pour la culture)

Code:
Set Rst2 = Cn.Execute("select `REQ$`.`" & ColImport & "` FROM `" & PathImportCata2 & "`.`" & TabSource & "` `REQ$`")


Dans la variable ColImport tu met le nom de l'en tête de ta colonne (valeur dans la cellule "A1" par exemple pour la colonne A)

PathImport Cata = le chemin d'acces du fichier
TabSource => l'onglet ou ce trouve les données


Ses code sont a adapter à ton fichier =)

En espérant que cela t'aide.

Edit: Pour faire fonctionner ADO faut activer les bonne références dans ton projet VBA => Outils => références.
Je connais plus par coeur mais une petite recherche google et tu trouve

Meilleures salutations
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
116

Statistiques des forums

Discussions
312 209
Messages
2 086 275
Membres
103 170
dernier inscrit
HASSEN@45