begin process at 2012 02 13 23:12:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Copie de données d'un classeur à l'autre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copie de données d'un classeur à l'autre

dimanche 11 février 2007 à 02:45:58 | Copie de données d'un classeur à l'autre

olivier857

Membre Club

Bonjour à tous,

J'ai un problème de copie de donées d'un classeur à l'autre et ne trouve pas de solution. Apparement le problème provient de ma demarche de selection des cellules avant collage des données, celles-ci ne noit pas correspondre à ma cellule copier, ou bien alors je ne suis peut être pas le bonne ordre pour activer le classeur, la feuille et les cellules,...

Voici mon code, on y retrouve en rouge la partie problématique :



Private Sub cmd_import_Click()

    Dim fichier_valfor As Variant
    Dim classeur_cible As Workbook
    Dim feuille_cible As Worksheet
    Dim ligne As String
    Dim premier_decoupage() As String
    Dim donnees_generales() As String
    Dim donnees_libelles() As String
    Dim donnees_PR() As String
    Dim donnees_LU() As String
    Dim detail_donnees_PR()
    Dim detail_donnees_LU()
    Dim i  As Long
    Dim depart, count, j, k, l, x As Integer
    Dim monTab() As String

'''''Initialisationde de la fenêtre destination''''''''''''''''''''''''''''''''''
    Destination.cmd_old.Locked = True
    Destination.Option_new = True
    Destination.Option_old = False
    Destination.txt_new_ch_classeur.Locked = False
    Destination.txt_new_nom_classeur.Locked = False
    Destination.txt_new_onglet.Locked = False
    Destination.txt_old_classeur.Locked = True
    Destination.txt_old_onglet.Locked = True
    Destination.txt_new_ch_classeur.BackStyle = fmBackStyleOpaque
    Destination.txt_new_nom_classeur.BackStyle = fmBackStyleOpaque
    Destination.txt_new_onglet.BackStyle = fmBackStyleOpaque
    Destination.txt_old_classeur.BackStyle = fmBackStyleTransparent
    Destination.txt_old_onglet.BackStyle = fmBackStyleTransparent
    Destination.txt_new_ch_classeur.Text = "G:\Outil Valfor\Valfor excel\"
    Destination.txt_new_nom_classeur.Text = ""
    Destination.txt_new_onglet.Text = ""
    Destination.txt_old_classeur.Text = ""
    Destination.txt_old_onglet.Text = ""
    Destination.txt_type_forfait.Text = ""
    quit = False
       
'''''Affichage de la fenêtre destination'''''''''''''''''''''''''''''''''''''''''
    Destination.Show

'''''Test si la fenêtre destination à été quitté proprement''''''''''''''''''''''
    If quit = True Then Exit Sub

''''''Copie du masque de donnée'''''''''''''''''''''''''''''''''''''''''''''''
    If old = True Then  'Copie dans un nouvel onglet d'un classeur existant
        Worksheets("macro").Select
        Cells.Select
        Selection.Copy
        Workbooks.Open Destination.txt_old_classeur.Text
        Sheets.Add
        ActiveSheet.Name = Destination.txt_old_onglet.Text
        Sheets(Destination.txt_old_onglet.Text).Select
        Cells.Select
        ActiveSheet.Paste

        Range("C1") = Destination.txt_type_forfait.Text
        Range("C2") = Destination.txt_date_camp.Text
        Range("C3") = Destination.txt_cdp.Text
        Set classeur_cible = ActiveWorkbook
        Set feuille_cible = ActiveSheet
    ElseIf old = False Then 'Copie dans un nouveau classeur
        Worksheets("macro").Select
        Cells.Select
        Selection.Copy
        Application.Workbooks.Add
        Application.DisplayAlerts = False
        ActiveWorkbook.Worksheets(3).Delete
        ActiveWorkbook.Worksheets(2).Delete
        ActiveWorkbook.Worksheets(1).Name = Destination.txt_new_onglet.Text
        Application.DisplayAlerts = True
        ActiveWorkbook.Activate
        Sheets(Destination.txt_new_onglet.Text).Select
        Cells.Select
        ActiveSheet.Paste

        Range("C1") = Destination.txt_type_forfait.Text
        Range("C2") = Destination.txt_date_camp.Text
        Range("C3") = Destination.txt_cdp.Text
        Set classeur_cible = ActiveWorkbook
        Set feuille_cible = ActiveSheet
    End If



Voilà si quelqu'un peut m'espliquer mon erreur ca serait génial.

Merci d'avance

Olivier

dimanche 11 février 2007 à 14:01:31 | Re : Copie de données d'un classeur à l'autre

MPi

Essaie comme ceci pour voir
        Sheets(Destination.txt_old_onglet.Text).Activate
        Range("A1").Select
        ActiveSheet.Paste


       ou peut-être
       Range("A1").pastespecial xlpastevalues
       Range("A1").pastespecial xlpasteFormats  ' au besoin
       Range("A1").pastespecial xlpasteFormulas  ' au besoin

MPi
dimanche 11 février 2007 à 15:38:44 | Re : Copie de données d'un classeur à l'autre

drouault

Et comme ça ????

Compte.Worksheets(Destination.txt_old_onglet.Text).Cells(1, 1).Select

Pierre
dimanche 11 février 2007 à 16:26:31 | Re : Copie de données d'un classeur à l'autre

Molenn

Personnellement moi, je me refuse à utiliser les ActiveWorkbook etc quand je veux faire des copies de données d'un classeur à un autre, il suffit que je rajoute une procédure après et tout fout le camp, etc ... Je préfère de loin déclarer systématiquement les classeurs.
Pour celà, avant toute copie, j'ouvre mon classeur de destination :
Workbooks.open ("chemin du fichier\Fichier cible.xls")
(Là, moi je joue avec des variables parce que je ne veux pas que, sous prétexte qu'on change un accent dans le nom du fichier, ça ne fonctionne plus, mais chacun son truc ^^)

Ensuite, je copie les données :
Workbooks("Fichier d'origine.xls").Worksheets("Nom de la feuille").Cells.Copy
Workbooks("Fichier cible.xls").Worksheets("Nom de la feuille").Cells.pastespecial xlpastevalues
(avec les différentes options ... L'enregistreur de macro te les donnera).

Depuis que je fonctionne ainsi, je n'ai plus de pbs de copies entre mes différents classeurs, et je ne passe pas trois plombes à rechercher à quel classeur me renvoit ActiveWorkbook, etc ...

Molenn
dimanche 11 février 2007 à 23:32:48 | Re : Copie de données d'un classeur à l'autre

olivier857

Membre Club
Molenn je ne suis pas sure d ebien comprendre ce que tu m'explique. Aurait tu  stp un bout de code concret a me donner.

Merci

Oliv
lundi 12 février 2007 à 11:21:31 | Re : Copie de données d'un classeur à l'autre

Molenn

Celui que je te donne est un exemple concret déjà ^^, mais je vais quand même te faire un exemple.

Je veux copier les cellules A1 à A10 de la feuille 1 de mon classeur dans les cellules B5 à B15 de la feuille 3 du classeur Test.xls situé dans le répertoire C:\Temp.
Le classeur ouvert (et dans lequel se trouve ma macro) s'appelle Démo.xls


La première chose à faire, ouvrir le fichier cible, à savoir Test.xls
C'est tout simple, le code est : Workbooks.open ("C:\Temp\Test.xls")

Ensuite, l'opération se décomposant en deux, je vais d'abord copier les cellules A1 à A10 de ma feuille 1, du classeur Démo.xls
Le code : Workbooks("Démo.xls").Worksheets("Feuille 1").Range("A1:A10").Copy

Plus qu'à coller dans le classeur Test.xls
Le code : Workbooks("Test.xls").Worksheets("Feuille 3").Range("B5:B15").Pastespecial xlpastevalues

Voilà, c'est tout.

Molenn
lundi 12 février 2007 à 22:39:30 | Re : Copie de données d'un classeur à l'autre

olivier857

Membre Club
Bon alors je reviens à la charge car je n'arrive tjs pas à réaliser ce que je souhaite. Apparement peu importe ce que je fait sur l'un des 2 classeurs ,que ce soit l'ancien que je réouvre ou le nouveau que je crée, cela plante.

A partir du moment ou je fait "workbooks(). ..."  ou "workshettes(). ..." peu importe ce que j'écrit derrière mon code plante.

Je vous redonne mon code :

If old = True Then  'Copie dans une nouvel feuille d'un classeur existant
        old_ong = Destination.txt_old_onglet
        old_class = Destination.txt_old_classeur
        Worksheets("macro").Cells.Copy
        Workbooks.Open old_class
        Sheets.Add
        Workbooks(old_class).ActiveSheet.Name = old_ong
        Workbooks(old_class).Worksheets(old_ong).Cells.Paste
        Workbooks(old_class).Worksheets(old_ong).Range("C1") = Destination.txt_type_forfait.Text
        Workbooks(old_class).Worksheets(old_ong).Range("C2") = Destination.txt_date_camp.Text
        Workbooks(old_class).Worksheets(old_ong).Range("C3") = Destination.txt_cdp.Text
        Set classeur_cible = Workbooks(old_class)
        Set feuille_cible = Workbooks(old_class).Worksheets(old_ong)
    ElseIf old = False Then 'Copie dans une feuille d'un nouveau classeur
        new_ch = Destination.txt_new_ch_classeur
        new_class = Destination.txt_new_nom_classeur
        new_ong = Destination.txt_new_onglet
        Worksheets("macro").Cells.Copy
        Application.Workbooks.Add
        ActiveWorkbook.SaveAs new_ch & new_class
        Application.DisplayAlerts = False
        Workbooks(new_class).Worksheets(3).Delete
        Workbooks(new_class).Worksheets(2).Delete
        Workbooks(new_class).Worksheets(1).Name = new_ong
        Application.DisplayAlerts = True
        Workbooks(new_class).Worksheets(new_ong).Cells.Paste
        Workbooks(new_class).Worksheets(new_ong).Range("C1") = Destination.txt_type_forfait.Text
        Workbooks(new_class).Worksheets(new_ong).Range("C2") = Destination.txt_date_camp.Text
        Workbooks(new_class).Worksheets(new_ong).Range("C3") = Destination.txt_cdp.Text
        Set classeur_cible = Workbooks(new_class)
        Set feuille_cible = Workbooks(new_class).Worksheets(new_ong)
    End If


Voilà je ne comprend vraiment pas mon pb.
lundi 12 février 2007 à 23:04:50 | Re : Copie de données d'un classeur à l'autre

MPi

Essaie en utilisant 2 variables, disons Origine et Destination As Workbook (ou As window)

Quand tu es dans ton fichier d'origine, tu écris
Set Origine = ActiveWorkBook

Lorsque tu crées un nouveau WorkBook, tu te retrouves dans celui-ci par défaut, donc
Set Destination = ActiveWorkbook

Et tu peux donc te promener d'un à l'autre en les appelant par leurs nouveaux noms
Origine.Activate
Cells.copy
Destination.Activate
Range("A1").Pastespecial

MPi
mardi 13 février 2007 à 00:32:55 | Re : Copie de données d'un classeur à l'autre

olivier857

Membre Club
Je craque, ca marche tjs pas, même ta solution MPi. J'arrive a créer mes variables worskbook a faire mes set mais apres quand je les utilise ca plante tjs.
mardi 13 février 2007 à 02:41:42 | Re : Copie de données d'un classeur à l'autre

MPi

Si je me fie à ton premier message qui émane de ton projet de départ mais qui a peut-être changé en cours de route...

Avant ces déclarations, mets un MsgBox pour au moins t'assurer que tu as bien une valeur valable.
Sheets(Destination.txt_old_onglet.Text)
Sheets(Destination.txt_new_onglet.Text).Select

Du genre
MsgBox Destination.txt_old_onglet.Text

Qu'est-ce que tu reçois comme chaîne(s) de message ?

MPi

1 2 3

Cette discussion est classée dans : text, txt, destination, classeur, old


Répondre à ce message

Sujets en rapport avec ce message

Ré-enregistrer un txt [ par clems45 ] salutj'explique mon probleme....j'ai une TextBox et j'enregistre son contenu sur un txt apres avoir demandé la destination:chemins = InputBox("destina erreur d'execution 13 étrange [ par Robinwood01 ] BonjourAfin de simplifier les tests dans mon application je suis en train de faire plein de fonction, cependant j'ai un soucis avec celle ci qui se tr probleme avec settings.designer [ par redim3 ] bonjour jai un petit probleme que je ne sais comment regler dans le code autogenerer-.-Error    1    Type 'Microsoft.VisualBasic.HideModuleNameAttribu enregistrement dans la base access [ par rudybiss ] Bonjour!Toujours dans mon developpement de mon application,je viens auprès de vous solliciter une aide car je ne comprends plus rien.En effet,j'utilis Probleme BDD ACCESS [ par Systech_Systems ] J'utilise cette fonction avec une base de données ACCES connecté à mon appli par l'intermediaire d'une source de donnés avc vb.net ( Tableadpater + bi Majuscules [ par rudybiss ] Bonjour!Je suis confronté à une problème assez étrange,je veux dans le textbox du nom que tout soit en majuscule et j'ai mis ceci:txt_nom.Text = UCase chemin dans fichier Text [ par Vinvinsylvain ] Bonjour je recherche comment faire pour quand je clique sur une Picture, celle ci ouvre un fichier txt, va à une ligne spécifique et ouvre le fichier TableAdapter.Update, j'y arrive pas... [ par gilousab1 ] Bonjour, Je sais bien que je vais me faire éclater en posant cette question de noob, sachant que google et mon ami et que il existe déja 10 000 répons [VB.Net] Souci avec une variable publique [ par Kerlouan29 ] Bonjour J'ai un souci dans mon programme: je n'arrive pas à utiliser une variable que j'ai déclarée dans un module. [code=vb]Module Module_Variables_M Problème d'enregistrement dans la base de donnée access [ par lilsunrise ] salut tt le monde , bah voila mon blem g une app qui gère des info sur une base de donnée access , le blem c est que sur l app ya pas d'erreur tt marc


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales