Macro excel: ouvrir un fichier

azerty1896 -  
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!

1 réponse

  1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    0