Macro excel: ouvrir un fichier
azerty1896
-
Le Pingou Messages postés 12276 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12276 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai une macro à faire dans excel et je ne sais pas trop comment faire...pourriez vous m'aider ?
Je dois aller ouvrir un fichier (document A) , copier le contenu d'un onglet dans un onglet d'un autre fichier excel (document B). Puis copier ce même contenu vers un 2eme onglet du document B.
Quelle est le code VBA pour ça ?
Merci beaucoup!
J'ai une macro à faire dans excel et je ne sais pas trop comment faire...pourriez vous m'aider ?
Je dois aller ouvrir un fichier (document A) , copier le contenu d'un onglet dans un onglet d'un autre fichier excel (document B). Puis copier ce même contenu vers un 2eme onglet du document B.
Quelle est le code VBA pour ça ?
Merci beaucoup!
1 réponse
-
Bonjour,
Ci après une procédure (avec ligne explicative) qui renferme une bonne partie de votre demande.
A vous de l'adapter :Sub Importer_tab() ' Déclaration des variables Dim objcible As Workbook, objsource As Workbook Dim Msg As String, style As String, Titre As String, rep As String Dim w As Variant Dim delig, delici, numsem, agof, cpttab, Faux ' récupérer le nom du classeur cible dans la variable Set objcible = ActiveWorkbook ' valider le classeur source ' est-il déjà ouvert,si le nb est 1, il n'est pas ouvert on va a la ligne NonOuvert If Workbooks.Count = 1 Then GoTo NonOuvert ' boucle sur les classeurs ouvert du PC For Each w In Workbooks ' w.Name est le non du classeur trouver et si différent de celui-ci If w.Name <> ThisWorkbook.Name Then ' préparation des éléments du message et affichage pour décision Msg = "Classeur ouvert : " & w.Name & Chr(13) & "S'il sagit du classeur source, clic sur Valider . Autrement clic Non." style = vbYesNo Titre = "Valider classeur source" rep = MsgBox(Msg, style, Titre) ' contrôle la réponse If rep = vbYes Then ' L'utilisateur a choisi Oui. ' récupérer le nom du classeur source dans la variable' Set objsource = Workbooks(w.Name) objsource.Activate GoTo Suite ' aller directement à la ligne Suite End If End If Next w ' ligne pour classeur non ouvert NonOuvert: MsgBox ("Le classeur source n'est pas ouvert.") ' ouverture de la boite de dialogue qui permet de choisir le classeur sans devoir interrompre la procédure agof = Application.GetOpenFilename ' si le classeur n'est pas slectionné retour sur ligne NonOuvert If agof = Faux Then GoTo NonOuvert ' récupérer le nom du classeur source dans la variable' Set objsource = Workbooks.Open(agof) ' ligne pour classeur ouvert Suite: Application.ScreenUpdating = False ' activer le classeur source objsource.Activate ' Boucle sur les onglets pour copier/coller tableau hebdomadaire sans titre colonne For Each w In Worksheets ' Ne pas prendre la feuille [Base] If w.Name <> "Base" Then ' récupérer la dernière ligne du tableau à importer delig = Sheets(w.Name).Cells(65536, 1).End(xlUp).Row 'si delig =1 il n'y a pas de tableau If delig <> 1 Then ' récupérer la première ligne vide + 1 vide onglet correspondant classeur cible delici = objcible.Sheets(w.Name).Cells(65536, 1).End(xlUp).Row + 2 numsem = Sheets(w.Name).Range("B2").Value ' écrire les données dans le classeur cible objsource.Activate Sheets(w.Name).Range("A2:I" & delig).Copy objcible.Sheets(w.Name).Activate Range("A" & delici).Select '& ":I" & delici + delig - 2).Value = Sheets(w.Name).Range("A2:I" & delig).Value Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats ', Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False cpttab = cpttab + 1 End If End If objsource.Activate ' prochain onglet Next w 'activer et sauver le classeur cible objcible.Activate objcible.Save Sheets("Base").Select ' renseigner le journal hebdomadaire à la suite delig = Cells(65536, 2).End(xlUp).Row + 1 Cells(delig, 1) = numsem Cells(delig, 2) = cpttab Cells(delig, 3) = Format(Date, "dd mmmm yyyy") & " à " & Time Cells(delig, 4) = objsource.Name Range("A1").Select Application.ScreenUpdating = True MsgBox ("Les " & cpttab & " taleaux hebdomadaires sont importées.") End Sub
Salutations.
Le Pingou