Renvoi automatique d'un onglet d'un classeur dans un autre

Moreno076

XLDnaute Impliqué
Bonsoir.

Tous les jours je fais deux extractions qui sont en format excel. Fichier A et Ficher B Ces fichiers portent toujours le même nom. Je fais un copier/coller de ces deux fichiers, portant un seul onglet A et l'autre onglet B, vers un troisieme fichier.

Ma question est la suivante. Est-il possible qu'au lieu de faire des copier coller les onglets A et B, ils se copient automatiquement dans l'onglet correspondant de mon troisieme fichier?

Merci
 

Jack2

XLDnaute Occasionnel
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir,

Je ne suis pas sûr d'avoir compris entièrement le problème. Le bout de code suivant copie l'intégralité de la feuille A (Fichier A) de la feuille B (Fichier B) dans un fichier de destination (le contenu du fichier de destination est effacé, pour le garder, il faudrait incrémenter les onglets). SI les fichier A et B ne sont pas du type Excel, tout est à revoir.

A mettre dans le fichier de destination :
Code:
Sub Renvoi_Onglet_Dans_Autre_Classeur()
    'si fichier ouvert
    Windows("FichierA.xls").Activate
    Sheets("A").Select
    Cells.Select
    Selection.Copy
    
    Windows("Fichier_Destination.xls").Activate
    Sheets("A").Select
    Cells.Select
    ActiveSheet.Paste
    Range("A1").Select
    
    'si fichier ouvert
    Windows("FichierB.xls").Activate
    Sheets("B").Select
    Cells.Select
    Selection.Copy
    
    Windows("Fichier_Destination.xls").Activate
    Sheets("B").Select
    Cells.Select
    ActiveSheet.Paste
    Range("A1").Select
End Su

A+
 
Dernière édition:

Moreno076

XLDnaute Impliqué
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir Jack, voilà le fichier ci joint.
Sur l'onglet Synthèse, il y a un bouton avec une macro qui utilise les 3 autres onglets.
Tous les jours je fais une extraction qui porte le nom de fichier Rupture, une autre qui s'appelle Reappro et une autre qui s'appelle wms. Je fais un copier coller des 3 fichiers dans les onglets du fichier ci-joint. Je souhaiterais dans l'ideal 3 boutons en dessous de celui de Synthèse qui rappatrient automatiquement le fichier Rupture dans ExtractionRupture, Reappro dans ExtractionReappro, wms dans WMS. Les 3 fichiers se trouvent dans le dossier M:\EXTRACTION REAPPRO. Ces fichiers n'ont qu'un seul onglet.

Merci de ton aide.
 

Pièces jointes

  • test.xls
    72.5 KB · Affichages: 29
  • test.xls
    72.5 KB · Affichages: 35
  • test.xls
    72.5 KB · Affichages: 39

Jack2

XLDnaute Occasionnel
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir,

J'espère que cela te fera avancer. Il y a 3 boutons dans l'onglet synthèse (fichier "synthèse.xls") qui rapatrient les données des fichiers Rupture.xls, Reappro.xls, et WMS.xls (ceux-ci sont formatés comme les onglets correspondants.

Les données copiées sont fonction de celles qu'il y a dans les trois fichiers. Si cela pose des problèmes d'écrasement de données dans le fichier synthèse, on peut faire un test comparatif du nombre de lignes

Bonne soirée
A+
 

Pièces jointes

  • Synthèse.xls
    86 KB · Affichages: 35
  • Synthèse.xls
    86 KB · Affichages: 30
  • Synthèse.xls
    86 KB · Affichages: 30
  • WMS.xls
    21 KB · Affichages: 36
  • Rupture.xls
    21 KB · Affichages: 38
  • WMS.xls
    21 KB · Affichages: 37
  • Rupture.xls
    21 KB · Affichages: 37
  • WMS.xls
    21 KB · Affichages: 30
  • Rupture.xls
    21 KB · Affichages: 58
  • Reappro.xls
    19 KB · Affichages: 28

Moreno076

XLDnaute Impliqué
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir. Ca ne fonctionne pas pour le moment "erreur d execution 9" et ca m'ouvre la fenetre de debogage Windows("Rupture.xls").Activate. Faut-il avoir les fichiers ouverts? J'ai essayé ouvert et fermé. Est-il possible de mettre un chemin?.
D'autre part j'ai oublié de préciser que le nombre de lignes des 3 fichiers peut etre de 1 à des centaines de lignes.

Merci de ton aide :)
 

Jack2

XLDnaute Occasionnel
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonjour,

Je pense que l'erreur 9 se produisait probablement à cause d'un chemin invalide (ou fichier pas ouvert). Dans les trois procédures qui rapatrient les données, il y a une variable chemin, probablement "M:\EXTRACTION REAPPRO\" dans ton cas (ne pas oublier le dernier antislash). En début de code, j'ai mis un test pour vérifier si le fichier est ouvert. En fin de code et en option la fermeture des 3 fichiers Rupture.. (cf. commentaire dans la procédure).

Bonne chance,
A+

PS J’apprends beaucoup en essayant de t'aider
 

Pièces jointes

  • Synthèse_2.xls
    95 KB · Affichages: 34

Moreno076

XLDnaute Impliqué
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir encore moi ^^
J'ai copier les 4 fichiers dans le dossier c:\gestion. J'ai modifié la macro en mettant c:\gestion\ Il y a toujours une erreur 9 ou 53. J'ai essayé de mettre rupture et rupture.xls. Rien n' y fait je ne comprend pas.

Moi aussi je commence à apprendre les macros.

On va y arriver !!!

Je te rejoins le fichier que j'ai renommer en synthèse tout court.

Bon courage aussi et encore merci
 

Pièces jointes

  • Synthèse.xls
    89 KB · Affichages: 41
  • Synthèse.xls
    89 KB · Affichages: 38
  • Synthèse.xls
    89 KB · Affichages: 44
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonjour,

Ca fonctionne très bien chez moi (ton fichier ou mon fichier). Est-ce que tu peux me dire à quel endroit tu as une erreur (9 ou 53). Essaye de localiser la ligne en faisant un pas-à-pas (F8). Y a pas de raison que cela ne marche pas partout.

A+
 

Jack2

XLDnaute Occasionnel
Re : Renvoi automatique d'un onglet d'un classeur dans un autre

Bonsoir,

J'ai vu que tu commences autre un fil sur le même thème. On arrête celui-ci ?

A+

Ps dans le test sur l'existence d'un fichier ouvert le Case Else ne semble pas géré et peut planter. Il existe une solution :
Code:
Dim Ret As Integer

Function IsFileOpen(filename As String, OK As Boolean As Boolean
' (code Microsoft donné par BrunoM45 (Barbatruc)
' http://support.microsoft.com/default.aspx?scid=kb;EN-US;q138621)
Dim filenum As Integer, errnum As Integer

  OK = False
  On Error Resume Next   ' Turn error checking off.
  filenum = FreeFile()   ' Get a free file number.
  ' Attempt to open the file and lock it.
  Open filename For Input Lock Read As #filenum
  Close filenum          ' Close the file.
  errnum = Err           ' Save the error number that occurred.
  On Error GoTo 0        ' Turn error checking back on.
  ' Check to see which error occurred.
  Select Case errnum
    ' No error occurred.
    ' File is NOT already open by another user.
    Case 0
      IsFileOpen = False
     Ret = 0
    ' Error number for "Permission Denied."
    ' File is already opened by another user.
    Case 70
      IsFileOpen = True
     Ret = -1
    ' Another error occurred, file is being queried.
    Case Else
      Ret = errnum
  End Select
If Ret < 1 Then OK = True
End Function

Sub Arret()
    Ret = MsgBox("Erreur (nom du chemin, du fichier...)" & Chr(10) & "Arrêt de la macro", vbOKOnly + vbInformation)
    End
End Sub

Sub ImportRupture()
Dim DerLg As Integer
Dim OK As Boolean
    
    Chemin = "C:\Gestion\" '"C:\Gestion\"   'A modifier si nécessaire
    On Error Resume Next
    If IsFileOpen(Chemin & "Rupture.xls", OK) And OK Then
        Windows("Rupture.xls").Activate
       GoTo Suite
    Else
        Arret
    End If
    
    If Not IsFileOpen(Chemin & "Rupture.xls", OK) And OK Then
        Application.Workbooks.Open Chemin & "Rupture.xls"
    Else
        Arret
    End If
    
Suite:
----
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 995
Membres
103 082
dernier inscrit
adri77