Macro copier coller

silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010 - 9 juin 2010 à 12:13
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010 - 14 juin 2010 à 12:41
Bonjour à tous le forum,

Voila je reviens vers vous pour un petit coup de pouce concernant une macro que je dois faire. Voila l'architecture de mes fichiers:

Classeur: BDD Commercial1
Feuille : BDD_Commercial1

Classeur: BDD Commercial2
Feuille : BDD_Commercial2

Classeur: BDD Generale
Feuille : BDD_Commercial1
BDD_Commercial2


Je souhaite copier le contenu de la feuille BDD_Commercial1 du classeur BDD Commercial1 dans la feuille BDD_Generale du classeur BDD Generale. Et idem pour le classeur BDD Commerciale2

Quelqu'un peut m'aider ?

Merci

22 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 juin 2010 à 12:51
Bonjour,
je pense qu'un code comme celui-ci doit pouvoir répondre à ton problème.(à ajuster pour prendre en compte Tous tes classeurs)...


Sub RecopieClasseurs()
Dim Chemin_classeur As String
Chemin_classeur = "c:\BDD Commercial1.xls"

'Ouverture classeur
    Workbooks.Open (Chemin_classeur)
'Copie des données de la feuille
    Workbooks("BDD Commercial1.xls").Sheets("BDD_Commercial1").Select
        Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
        Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
    Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
    Selection.Copy
'coller dans le classeur général à la derniere ligne
    Workbooks("General.xls").Activate
    Sheets("general").activate
    Derniere_Ligne = 1
    On error resume next
    Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
    Cells(Derniere_Ligne, "A").Activate
    ActiveSheet.Paste
' fermeture du classeur source
workbooks("BDD Commercial1.xls").Close
End Sub



* Penses à modifier le nom des feuilles et des classeurs pour correspondre à tes besoins.

Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
9 juin 2010 à 12:52
Ok je vais tester ça et je tiens au courant !
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
9 juin 2010 à 14:27
Voila mon code :

Sub Bouton1_QuandClic()

Dim Chemin_classeur_Commercial1 As String
Dim Chemin_classeur_Commercial2 As String
Dim Chemin_classeur_Techniques As String
Dim Chemin_classeur_Facturation As String
Dim Chemin_classeur_Relationclient As String
Dim Chemin_classeur_Méthodes1 As String
Dim Chemin_classeur_Méthodes2 As String
Dim Chemin_classeur_Exploitation1 As String
Dim Chemin_classeur_Exploitation2 As String
Dim Chemin_classeur_Exploitation3 As String
Dim Chemin_classeur_Exploitation4 As String
Dim Chemin_classeur_Exploitation5 As String
Dim Chemin_classeur_Exploitation6 As String
Dim Chemin_classeur_Exploitation7 As String
Dim Chemin_classeur_Exploitation8 As String


Chemin_classeur_Commercial1 = "K:\Base de données GRC\Commercial\BDD Commercial1.xls"
Chemin_classeur_Commercial2 = "K:\Base de données GRC\Commercial\BDD Commercial2.xls"
Chemin_classeur_Techniques = "K:\Base de données GRC\Techniques\BDD Techniques.xls"
Chemin_classeur_Facturation = "K:\Base de données GRC\Facturation\BDD Facturation.xls"
Chemin_classeur_Relationclient = "K:\Base de données GRC\Relation client\BDD Relationclient.xls"
Chemin_classeur_Méthodes1 = "K:\Base de données GRC\Méthodes\BDD Méthodes1.xls"
Chemin_classeur_Méthodes2 = "K:\Base de données GRC\Méthodes\BDD Méthodes2.xls"
Chemin_classeur_Exploitation1 = "K:\Base de données GRC\Exploitation\BDD Exploitation1.xls"
Chemin_classeur_Exploitation2 = "K:\Base de données GRC\Exploitation\BDD Exploitation2.xls"
Chemin_classeur_Exploitation3 = "K:\Base de données GRC\Exploitation\BDD Exploitation3.xls"
Chemin_classeur_Exploitation4 = "K:\Base de données GRC\Exploitation\BDD Exploitation4.xls"
Chemin_classeur_Exploitation5 = "K:\Base de données GRC\Exploitation\BDD Exploitation5.xls"
Chemin_classeur_Exploitation6 = "K:\Base de données GRC\Exploitation\BDD Exploitation6.xls"
Chemin_classeur_Exploitation7 = "K:\Base de données GRC\Exploitation\BDD Exploitation7.xls"
Chemin_classeur_Exploitation8 = "K:\Base de données GRC\Exploitation\BDD Exploitation8.xls"

'Ouverture classeur
Workbooks.Open (Chemin_classeur_Commercial1)
Workbooks.Open (Chemin_classeur_Commercial2)
Workbooks.Open (Chemin_classeur_Techniques)
Workbooks.Open (Chemin_classeur_Facturation)
Workbooks.Open (Chemin_classeur_Relationclient)
Workbooks.Open (Chemin_classeur_Méthodes1)
Workbooks.Open (Chemin_classeur_Méthodes2)
Workbooks.Open (Chemin_classeur_Exploitation1)
Workbooks.Open (Chemin_classeur_Exploitation2)
Workbooks.Open (Chemin_classeur_Exploitation3)
Workbooks.Open (Chemin_classeur_Exploitation4)
Workbooks.Open (Chemin_classeur_Exploitation5)
Workbooks.Open (Chemin_classeur_Exploitation6)
Workbooks.Open (Chemin_classeur_Exploitation7)
Workbooks.Open (Chemin_classeur_Exploitation8)

'Copie des données de la feuille commercial1
Workbooks("BDD Commercial1.xls").Sheets("BDD_Commercial1").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille commercial2
Workbooks("BDD Commercial2.xls").Sheets("BDD_Commercial2").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Techniques
Workbooks("BDD Techniques.xls").Sheets("Techniques").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Facturation
Workbooks("BDD Facturation.xls").Sheets("Facturation").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Relationclient
Workbooks("BDD Relationclient.xls").Sheets("Facturation").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Méthodes1
Workbooks("BDD Méthodes1.xls").Sheets("Méthodes1").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Méthodes2
Workbooks("BDD Méthodes2.xls").Sheets("Méthodes2").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation1
Workbooks("BDD Exploitation1.xls").Sheets("Exploitation1").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation2
Workbooks("BDD Exploitation2.xls").Sheets("Exploitation2").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation3
Workbooks("BDD Exploitation3.xls").Sheets("Exploitation3").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation4
Workbooks("BDD Exploitation4.xls").Sheets("Exploitation4").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation5
Workbooks("BDD Exploitation5.xls").Sheets("Exploitation5").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation6
Workbooks("BDD Exploitation6.xls").Sheets("Exploitation6").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation7
Workbooks("BDD Exploitation7.xls").Sheets("Exploitation7").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'Copie des données de la feuille Exploitation8
Workbooks("BDD Exploitation8.xls").Sheets("Exploitation8").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy


'coller dans le classeur général à la derniere ligne Commercial1
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Commercial1").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Commercial2
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Commercial2").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Techniques
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Techniques").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Facturation
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Facturation").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Relationclient
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Relationclient").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Méthodes1
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Méthodes1").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Méthodes2
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Méthodes2").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation1
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation1").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation2
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation2").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation3
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation3").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation4
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation4").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation5
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation5").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation6
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation6").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation7
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation7").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

'coller dans le classeur général à la derniere ligne Exploitation8
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation8").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste


' fermeture du classeur source
Workbooks("BDD Commercial1.xls").Close
Workbooks("BDD Commercial2.xls").Close
Workbooks("BDD Techniques.xls").Close
Workbooks("BDD Facturation.xls").Close
Workbooks("BDD Relationclient.xls").Close
Workbooks("BDD Méthodes1.xls").Close
Workbooks("BDD Méthodes2.xls").Close
Workbooks("BDD Exploitation1.xls").Close
Workbooks("BDD Exploitation2.xls").Close
Workbooks("BDD Exploitation3.xls").Close
Workbooks("BDD Exploitation4.xls").Close
Workbooks("BDD Exploitation5.xls").Close
Workbooks("BDD Exploitation6.xls").Close
Workbooks("BDD Exploitation7.xls").Close
Workbooks("BDD Exploitation8.xls").Close

End Sub

Il m'ouvre toutes les bases sans problèmes, juste au moment ou il me met une erreur :

"Erreur d'execution 1004"
La méthodes Select de la classe Worksheet à échoué
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
9 juin 2010 à 14:37
Bon j'ai regroupé chaque opération pour chaque BDD.

Mais maintenant il me met que le presse papier contient une grande quantité d'information
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 juin 2010 à 15:11
re,
je vois une première petite erreur...
il faut Copier puis coller chaque classeur...
tu ne peux pas selectionner les données de chaque classeur puis coller le tout.. tu dois le faire les uns apres les autres.

Ensuite, je viens de voir que tu veux copier les feuilles de tes classeurs dans le classeur BDD Generale.xls => chaque feuille dans un onglet différent... c'est bien ça. (car moi je t'avais écris le code pour copier les données à la suite.. dans une seule feuille).

Bref.. si ton souhait c'est de récuperer une feuille dans chaque classeur pour la copier telle quelle dans le classeur général.. utilises le code ci dessous :

Sub copier_feuilles_dans_classeur_general()

'----  Partie du programme à répéter pour chaque classeur à recopier
Dim classeur1 As String
Dim NomClass As String
NomClass = "BDD Commercial1.xls"
classeur1 = "C:\Documents and Settings\j_reynet\Bureau\classer" & NomClass
CF = copie_feuille(classeur1, NomClass, "BDD_Commercial1")
'-------------------------------------------------------------------

End Sub

' -------  A n'écrire qu'une seule fois dans ton programme : --------------
Function copie_feuille(Chemin_classeur As String, Nom_Classeur As String, nom_feuille As String)
'ouverture du classeur
    Workbooks.Open (Chemin_classeur)
'selection de la feuille
    Sheets(nom_feuille).Select

'test si cette feuille existe déjà dans le classeur général et lance la copie si FAUX
If FExist("BDD Generale.xls", nom_feuille) = False Then
    Dernière_feuille = Workbooks("BDD Generale.xls").Sheets.Count 'compte le nb de feuilles
    'copie de la feuille en dernière position
    Workbooks(Nom_Classeur).Activate
    Sheets(nom_feuille).Copy After:=Workbooks("BDD Generale.xls").Sheets(Dernière_feuille)
End If
End Function

Function FExist(NomClasseur, NomF As String) As Boolean ' test si la feuille existe
Application.ScreenUpdating = False
Workbooks(NomClasseur).Activate
On Error Resume Next
FExist = Not Sheets(NomF) Is Nothing
Application.ScreenUpdating = True
End Function



Cordialement,
Jordane,
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 juin 2010 à 15:17
Petites précisions :

NomClass = "BDD Commercial1.xls"
classeur1 = "C:\Documents and Settings\j_reynet\Bureau\classer" & NomClass
CF = copie_feuille(classeur1, NomClass, "BDD_Commercial1")



NomClass : Nom du classeur source
Classeur1 : Chemin du classuer (ne modifier que ce qu'il y a entre guillemets )
CF copie_feuille(classeur1, NomClass, "BDD_Commercial1")> appel de la fonction qui effectue la recopie : copie_feuille(Chemin du classeur à copier, Nom du classeur à copier, Nom de la feuille à copier)

Tiens moi au courant

Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
10 juin 2010 à 16:16
Re,

Voila le code que je répète 18 fois :

'----------------------------------------EXPLOITATION8-----------------------------------------
Dim Chemin_classeur_Exploitation8 As String
Chemin_classeur_Exploitation8 = "K:\Base de données GRC\Exploitation\BDD Exploitation8.xls"

'Ouverture classeur
Workbooks.Open (Chemin_classeur_Exploitation8)

'Copie des données de la feuille Exploitation8
Workbooks("BDD Exploitation4.xls").Sheets("BDD_Exploitation4").Select
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Range(Cells(1, 1), Cells(Derniere_Ligne, Derniere_Colonne)).Select
Selection.Copy

'coller dans le classeur général à la derniere ligne Exploitation8
Workbooks("BDD Generale.xls").Activate
Sheets("BDD_Exploitation8").Activate
Derniere_Ligne = 1
On Error Resume Next
Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1
Cells(Derniere_Ligne, "A").Activate
ActiveSheet.Paste

' fermeture du classeur source
Workbooks("BDD Exploitation8.xls").Close

' Vider le presse papier
Call ClearClipboard

End Sub

'----------------------------------Vider le presse papier----------------------------------

Sub ClearClipboard()
On Error Resume Next
Application.CommandBars("Clipboard").Controls(4).Execute

End Sub

Et il me met toujour un problème avec le presse papier
0
diahamid Messages postés 1 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 10 juin 2010
10 juin 2010 à 17:11
Salut à tous!
Je veux être pro en Développement
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
10 juin 2010 à 18:26
Bonjour,

diahamid,
Salut à tous!
Je veux être pro en Développement

.. Commence par écrire des lignes de codes


silverbeach56,

pour vider le presse papier, as tu essayé ce code ? :
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
 
Sub Vider_clipboard()
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
End Sub



Et sinon;.. tu n'as pas répondu à ma question : Que désires-tu : avoir toutes les données à la suite dans une Même feuille ? ou avoir une copie des tes onglets dans des feuilles séparées ?

Si c'est le cas N°2.. il faut que tu prennes mon code du post précédent.

et tu n'auras que cette partie à recopier :
'----  Partie du programme à répéter pour chaque classeur à recopier
Dim classeur1 As String
Dim NomClass As String
NomClass = "BDD Commercial1.xls"
classeur1 = "C:\Documents and Settings\j_reynet\Bureau\classer" & NomClass
CF = copie_feuille(classeur1, NomClass, "BDD_Commercial1")
'-------------------------------------------------------------------






Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
11 juin 2010 à 13:44
Bah en fait, j'ai 18 classeurs avec chacun une feuille.

Je souhaite copier chaque feuille dans une feuille différente de la BDD Generale.

exemple :

Classeur 1 ; feuille 1
(copier dans le classeur BDD Generale feuille 1)

Classeur 2 ; feuille 2
(copier dans le classeur BDD Generale feuille 2)

....

La commande pour vider le presse papier ne fonctionne pas. Il me met toujours le même message d'erreur.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
11 juin 2010 à 14:38
Re,

Bah en fait, j'ai 18 classeurs avec chacun une feuille.
Je souhaite copier chaque feuille dans une feuille différente de la BDD Generale.


Je repose donc ma question précédente.. As tu essayé le Nouveau code que je t'avais proposé (celui où il n'y a que quelques lignes à dupliquer) ?

Petit rappel : -> Le premier code que je t'ai proposé recopie les données de Chaque Feuille de tes classeurs dans UNE feuille (et une seule !) du classeur Général les unes en dessous des autres.
-> Le deuxième code, lui, rapatrie chacune de tes feuilles (de tes différents classeurs...) dans des onglets différents de ton classeur général.

donc..
- Quel code utilises tu actuellement ?
- Je ne rencontre pas de souci sur le presse papier.. le vides tu apres chaque copier/coller ? (as tu ouvert ton presse papier pour voir si les infos etaient bien supprimées ?)
- Si tu rencontres encore des soucis, peux tu nous dire à quelle ligne ça bloque ?

@++



Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
12 juin 2010 à 12:54
Salut Jordane

Voila le code que j'utilise :


Sub Bouton1_Clic()

'---- Partie du programme à répéter pour chaque classeur à recopier
Dim classeur1 As String
Dim NomClass1 As String
NomClass1 = "BDD Techniques.xls"
classeur1 = "C:\Bureau\Excel"
CF = copie_feuille(classeur1, NomClass1, "BDD_Techniques")


'---- Partie du programme à répéter pour chaque classeur à recopier
Dim classeur2 As String
Dim NomClass2 As String
NomClass2 = "BDD Facturation.xls"
classeur2 = "C:\Bureau\Excel"
CF = copie_feuille(classeur1, NomClass2, "BDD_Facturation")


'---- Partie du programme à répéter pour chaque classeur à recopier
Dim classeur3 As String
Dim NomClass3 As String
NomClass3 = "BDD Commercial1.xls"
classeur3 = "C:\Bureau\Excel"
CF = copie_feuille(classeur1, NomClass3, "BDD_Commercial1")


'---- Partie du programme à répéter pour chaque classeur à recopier
Dim classeur4 As String
Dim NomClass4 As String
NomClass4 = "BDD Commercial2.xls"
classeur4 = "C:\Bureau\Excel"
CF = copie_feuille(classeur1, NomClass4, "BDD_Commercial2")


End Sub

' ------- A n'écrire qu'une seule fois dans ton programme : --------------
Function copie_feuille(Chemin_classeur As String, Nom_Classeur As String, nom_feuille As String)

'ouverture du classeur
Workbooks.Open (Chemin_classeur)

'selection de la feuille
Sheets(nom_feuille).Select

'test si cette feuille existe déjà dans le classeur général et lance la copie si FAUX
If FExist("BDD Generale.xls", nom_feuille) = False Then
Dernière_feuille = Workbooks("BDD Generale.xls").Sheets.Count 'compte le nb de feuilles
'copie de la feuille en dernière position
Workbooks(Nom_Classeur).Activate
Sheets(nom_feuille).Copy After:=Workbooks("BDD Generale.xls").Sheets(Dernière_feuille)

End If
End Function

Function FExist(NomClasseur, NomF As String) As Boolean ' test si la feuille existe
Application.ScreenUpdating = False
Workbooks(NomClasseur).Activate
On Error Resume Next
FExist = Not Sheets(NomF) Is Nothing
Application.ScreenUpdating = True
End Function

End Function

Je comprend pas trop le code !!

Voila ce que j'ai compris :

Dans les premiers blocs j'indique les noms, les adresses des fichiers à copier
Et ensuite dans le bloc " A ne recopier qu'une seule fois " c'est la procédure de copie
Mais du coup il bloque sur la ligne :
'ouverture du classeur
Workbooks.Open (Chemin_classeur)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
14 juin 2010 à 08:08
salut,
tu as fait une erreur en recopiant le code. (tu as oublié le : & NomClass à la fin de chemin..
alors, pour éviter les soucis, voici comment tu dois réécrire le code: (je l'ai un peu modifié pour éviter les soucis de recopie)

'-------- déclaration des variables -----------------
Dim Nom_Classeur As String
Dim repertoire As String
Dim Chemin_classeur as string

'----  Partie du programme à répéter pour chaque classeur à recopier ----------

'Les deux variables que tu dois modifier 
Nom_Classeur= "BDD Commercial1.xls"
repertoire = "C:\Documents and Settings\j_reynet\Bureau\classer" 

'Chemin_classeur => chemin complet  = Repertoire + Nom_Classeur (ne pas modifier)
Chemin_classeur = repertoire & "" & Nom_Classeur 

'Appel de la fonction pour copier coller
CF = copie_feuille(Chemin_classeur, Nom_Classeur, "BDD_Commercial1")

'eventuellement, ICI tu places ton codes pour vider le presse papier
'ou l'appel de la fonction qui le fait
'------------------------------ FIN de la partie à recopier -------------------


Voia,
essayes ça (sans faute de recopie et tiens moi au courant.

Cordialement,
Jordane,
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
14 juin 2010 à 08:16
re re,
encore une chtite dernière modif : (pour le nom de la feuille)

tu ne dois plus modifier que ces 3 variables (pour chaque classeur)
repertoire = "C:\Bureau\Excel" 'ne pas modifier si toujours le même
Nom_Classeur= "BDD Commercial1.xls" 'nom du classeur à recopier
Nom_feuille_a_recopier = "BDD_Commercial1" 'nom de la feuille à recopier

et utiliser le code ci-dessous.


'-------- déclaration des variables -----------------
Dim Nom_Classeur As String
Dim repertoire As String
Dim Chemin_classeur as string
Dim Nom_feuille_a_recopier as string

'----  Partie du programme à répéter pour chaque classeur à recopier ----------

'Les trois variables que tu dois modifier 
repertoire = "C:\Bureau\Excel"
Nom_Classeur= "BDD Commercial1.xls"
Nom_feuille_a_recopier = "BDD_Commercial1"

'Chemin_classeur => chemin complet  = Repertoire + Nom_Classeur (ne pas modifier)
Chemin_classeur = repertoire & "" & Nom_Classeur 

'Appel de la fonction pour copier coller (ne pas modifier)
CF = copie_feuille(Chemin_classeur, Nom_Classeur, Nom_feuille_a_recopier)

'eventuellement, ICI tu places ton codes pour vider le presse papier
'ou l'appel de la fonction qui le fait
'------------------------------ FIN de la partie à recopier -------------------
'******************************************************************************

'-----------<<<<<<<  Suite du programme : >>>>>>>>>>>>>----------------
'tu passes ensuite au classeur N° 2 ->>>>>>>>>>
     repertoire = "C:\Bureau\Excel"
     Nom_Classeur= "BDD Commercial2.xls"
     Nom_feuille_a_recopier = "BDD_Commercial2"

'Chemin_classeur => chemin complet  = Repertoire + Nom_Classeur (ne pas modifier)
            Chemin_classeur = repertoire & "" & Nom_Classeur 
'Appel de la fonction pour copier coller (ne pas modifier)
             CF = copie_feuille(Chemin_classeur, Nom_Classeur, Nom_feuille_a_recopier)
' Puis au 3 

' etct...




Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
14 juin 2010 à 10:41
Slt Jordane,

J'ai recopié ton code :

Sub Bouton1_QuandClic()

'-------- déclaration des variables -----------------
Dim Nom_Classeur As String
Dim repertoire As String
Dim Chemin_classeur As String
Dim Nom_feuille_a_recopier As String

'---- Partie du programme à répéter pour chaque classeur à recopier ----------

' CLASSEUR TECHNIQUES--------------------------------------------------

'Les trois variables que tu dois modifier
repertoire = "K:\Base de données GRC\Techniques"
Nom_Classeur = "BDD Techniques.xls"
Nom_feuille_a_recopier = "BDD_Techniques"

'Chemin_classeur => chemin complet = Repertoire + Nom_Classeur (ne pas modifier)
Chemin_classeur = repertoire & "" & Nom_Classeur

'Appel de la fonction pour copier coller (ne pas modifier)
CF = copie_feuille(Chemin_classeur, Nom_Classeur, Nom_feuille_a_recopier)

'Vider le presse papier
Call Vider_clipboard

' CLASSEUR FACTURATION--------------------------------------------------

'Les trois variables que tu dois modifier
repertoire = "K:\Base de données GRC\Facturation"
Nom_Classeur = "BDD Facturation.xls"
Nom_feuille_a_recopier = "BDD_Facturation"

'Chemin_classeur => chemin complet = Repertoire + Nom_Classeur (ne pas modifier)
Chemin_classeur = repertoire & "" & Nom_Classeur

'Appel de la fonction pour copier coller (ne pas modifier)
CF = copie_feuille(Chemin_classeur, Nom_Classeur, Nom_feuille_a_recopier)

'Vider le presse papier
Call Vider_clipboard

Comme tu me l'as dis; je change juste le nom des classeurs...

Maintenant il me met une erreur comme quoi :
copie_feuille n'est pas déclaré.

J'ai voulu mettre que copie_feuille était une chaine, mais il m'a mis une erreur "tableau attendu"
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
14 juin 2010 à 10:48
HOP HOP, j'avais oublié de mettre un bout de programme !! Je mis perd un peu dans tous ça !! ^^

Je viens de retester, la copie fonctionne bien, j'ai plus l'erreur du presse papier.

Par contre il m'ouvre tous et ne me referme pas les bases de données.

Faut que je rajoute une ligne

..... .close nan ?
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
14 juin 2010 à 10:57
Voila la fin du programme :

' ------- A n'écrire qu'une seule fois dans ton programme : --------------
Function copie_feuille(Chemin_classeur As String, Nom_Classeur As String, nom_feuille As String)

'ouverture du classeur
Workbooks.Open (Chemin_classeur)

'selection de la feuille
Sheets(nom_feuille).Select

'test si cette feuille existe déjà dans le classeur général et lance la copie si FAUX
If FExist("BDD Generale.xls", nom_feuille) = False Then
Dernière_feuille = Workbooks("BDD Generale.xls").Sheets.Count 'compte le nb de feuilles
'copie de la feuille en dernière position
Workbooks(Nom_Classeur).Activate
Sheets(nom_feuille).Copy After:=Workbooks("BDD Generale.xls").Sheets(Dernière_feuille)

'fermeture du classeur
Workbooks(Chemin_classeur).Close

End If
End Function

Function FExist(NomClasseur, NomF As String) As Boolean ' test si la feuille existe
Application.ScreenUpdating = False
Workbooks(NomClasseur).Activate
On Error Resume Next
FExist = Not Sheets(NomF) Is Nothing
Application.ScreenUpdating = True
End Function

Tous ce passe bien, il n'y pas d'erreur d'execution. Mais la copie ne marche pas. Quand mes bases de données sont modifié, la modification n'apparait pas.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
14 juin 2010 à 11:30
Re,

1 - Pour ce qui est d'avoir les bases ouvertes.. Oui, tu peux faire un "Workbooks(nom_du_classeur).close.


2 - .. tu as un autre souci ?

* Quand tu lances ta macro.. la recopie se fait bien non ? (voir ton post précédent).


Tous ce passe bien, il n'y pas d'erreur d'execution. Mais la copie ne marche pas. Quand mes bases de données sont modifié, la modification n'apparait pas.

Quelles modifications ? Où sont elles faites ?

La macro que je t'ai donnée COPIE/COLLE les données d'une feuille dans ton classeur général... IL n'y a aucune laison ...



Cordialement,
Jordane,
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
14 juin 2010 à 11:39
Bah si tu veux, mes bases de données ex : BDD_Commerical1, BDD_Commercial2 ... sont modifiées tous les jours.

C'est pour ça, j'ai rentré une valeur dans une base pour tester. Mais elle n'apparait pas dans mon fichier BDD Générale à la fin de la copie.
0
silverbeach56 Messages postés 28 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 21 juin 2010
14 juin 2010 à 11:56
Je pense que l'erreur vient de la copie.
En effet, pour le moment la copie test si la feuille existe déjà dans le classeur général et lance la copie si FAUX.

Alors que forcement, la feuille est deja dans le classeur générale.

Moi ce que je souhaite c'est qu'il me copie la feuille avec ses données à chaque fois dans les onglets correspondant.

Si tu veux dans ma base générale, j'ai crée tous les onglets correspondant aux bases de données (ex:BDD_Commercial1...).

Donc limite le si faux, n'a pas d'interet vu que je souhaite copier/coller la feuille meme si elle est identique
0
Rejoignez-nous