Copie valeurs

Bonjour,

Je bloque sur une macro en VBA , je voudrais faire une macro qui copie la première feuille excel de mon classeur dans un autre classeur nommé "archivage" contenu dans un dossier , mais en ne collant que les valeurs des cellules et les graphes , et puis répéter l'opération plusieurs fois ( c-a-d exporter plusieurs feuilles dans le classeur "archivage")
merci d'avance pour votre aide.

4 réponses

  1. Un trés grand merci pour vos explications très détaillées et précises , toutefois pour la partie copiage ( 3eme étape) ce que je souhaite c'est copier les valeurs des cellules, la mise en forme ( bordures, couleurs des cellules.. ) ainsi que les graphes contenus dans ma feuille "indicateurs" , pour faire cela j'ai utilisé en premier lieu le code pour dupliquer ma feuille indicateurs ( copier toute la feuille avec formules et graphes et mise en forme ) après, en second lieu , je fait un second recopiage pour écraser les formules et les remplacer par leurs valeurs , sauf qu'avec cette solution mes graphes se mettent à jour automatiquement après chaque collage en conséquence je perds les graphes de l'export précédent !! merci d'avance.
    1. Modérateur
      après chaque collage en conséquence je perds les graphes de l'export précédent !!

      Ben non.
      Pas si vous créez une feuille à chaque export...
  2. Modérateur
    Bonjour,

    Tout d'abord :
    Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
    Le mode d'emploi (au cas ou) est ICI.

    Première étape :
    Ensuite, nous allons travailler avec deux classeurs. Pour ne pas nous mélanger les pinceaux, nous allons utiliser deux variables pointant vers nos 2 classeurs :
    WbkArchiv => classeur d'archivage
    WbkIndic => classeur d'indicateurs, celui qui contient la macro à exécuter.

    Dans le code, cela donne ceci :

    Sub ExportIndic()
    Dim WbkArchiv As Workbook, WbkIndic As Workbook
    Dim Fichier As String
    
    'classeur indicateurs
    Set WbkIndic = ThisWorkbook
    'Fichier va contenir le chemin d'accès complet + le nom du fichier Archivage
    Fichier = "C:\Users\Travail\Archives\Archivage.xlsx" 'A ADAPTER
    'classeur archivage
    Set WbkArchiv = Workbooks.Open(Fichier)
    End Sub


    Seconde étape :
    Détermination de la feuille à copier
    Nous avons son nom, et donc pouvons l'utiliser directement.
    Dans la procédure donnée ci-dessus, cela donne donc :
    Sub ExportIndic()
    Dim WbkArchiv As Workbook, WbkIndic As Workbook
    Dim Fichier As String
    
    'classeur indicateurs
    Set WbkIndic = ThisWorkbook
    'Fichier va contenir le chemin d'accès complet + le nom du fichier Archivage
    Fichier = "C:\Users\Travail\Archives\Archivage.xlsx" 'A ADAPTER
    'classeur archivage
    Set WbkArchiv = Workbooks.Open(Fichier)
    'utilisation de la feuille à copier
    With WbkIndic.Sheets("Indicateurs ") 'attention aux espaces dans les noms...
       'ici le code de copié collé
    End With
    End Sub


    Troisième étape :
    Le copié-collé.
    Pour cela, plusieurs possibilités.
    Nous allons utiliser celle que t'a donné l'enregistreur de macro. Si cela ne te convient pas, nous adapterons autre chose...
    Les codes important, et donc à retenir, de ta macro sont :
    Sheets("Indicateurs ").Select
    Cells.Select
    Selection.Copy
    Windows("Archivage.xlsx").Activate
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Nous voyons donc qu'il nous faut :
    - sélectionner la plage à copier
    - la coller au bon endroit.
    A savoir : En VBA, il est souvent inutile de sélectionner. Il suffit de bien déterminer l'objet Range (ou autre objet) avec lequel nous devons travailler.
    Ici, ton code ci-dessus deviendrait donc :
    Sheets("Indicateurs ").Cells.Copy Windows("Archivage.xlsx").Sheets("Feuil1").Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False

    Quatrième étape :
    Détermination de l'endroit ou coller les données.
    Ici, nous allons ajouter une feuille dans le classeur archivages, feuille que nous allons renommer "Indicateurs " + date et heure (au moment du copié-collé)
    'Dans le classeur archivages
    With WbkArchiv
        'on ajoute une feuille => elle devient automatiquement la feuille active
        .Sheets.Add
        'on la renomme
        .ActiveSheet.Name = "Indicateurs " & Format(Date, "yyyymmdd") & " " & Format(Time, "hhmmss")
        'on y colle les valeurs
        .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
        'on ferme le classeur
        .Close
    End With


    Cinquième étape [Optionnelle] :
    On teste, avant de l'ouvrir, si le fichier Archivages n'est pas déjà ouvert...
    Pour cela, on utilises une petite fonction de notre cru :
    Function ClasseurOuvert(Wbk As String) As Boolean
    On Error Resume Next
    Workbooks(Wbk).Activate
    If Err = 0 Then ClasseurOuvert = True
    On Error GoTo 0
    End Function

    Que l'on appelle dans notre procédure principale, comme ceci :
    '--------------classeur archivage---------------------
    'Fichier va contenir le chemin d'accès complet + le nom du fichier Archivage
    Fichier = "C:\Users\Travail\Archives\Archivage.xlsx" 'A ADAPTER
    NomFichier = "Archivages.xlsx"                             'A ADAPTER
    'Si archivage est fermé
    If ClasseurOuvert(NomFichier) = False Then
        'on l'ouvre
        Set WbkArchiv = Workbooks.Open(Fichier)
    'Sinon
    Else
        'on l'attribue à notre variable
        Set WbkArchiv = Workbooks(NomFichier)
    End If


    Code complet :
    Sub ExportIndic()
    Dim WbkArchiv As Workbook, WbkIndic As Workbook
    Dim Fichier As String, NomFichier As String
    
    '--------------classeur indicateurs-------------------
    Set WbkIndic = ThisWorkbook
    
    '--------------classeur archivage---------------------
    'Fichier va contenir le chemin d'accès complet + le nom du fichier Archivage
    Fichier = "C:\Users\Travail\Archives\Archivage.xlsx" 'A ADAPTER
    NomFichier = "Archivages.xlsx"                             'A ADAPTER
    'Si archivage est fermé
    If ClasseurOuvert(NomFichier) = False Then
        'on l'ouvre
        Set WbkArchiv = Workbooks.Open(Fichier)
    'Sinon
    Else
        'on l'attribue à notre variable
        Set WbkArchiv = Workbooks(NomFichier)
    End If
    'utilisation de la feuille à copier
    With WbkIndic.Sheets("Feuil1") 'attention aux espaces dans les noms...
        .Cells.Copy
    End With
    'Dans le classeur archivages
    With WbkArchiv
        'on ajoute une feuille => elle devient automatiquement la feuille active
        .Sheets.Add
        'on la renomme
        .ActiveSheet.Name = "Indicateurs " & Format(Date, "yyyymmdd") & " " & Format(Time, "hhmmss")
        'on y colle les valeurs
        .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
        'on ferme le classeur
        .Close
    End With
    End Sub
    
    Function ClasseurOuvert(Wbk As String) As Boolean
    On Error Resume Next
    Workbooks(Wbk).Activate
    If Err = 0 Then ClasseurOuvert = True
    On Error GoTo 0
    End Function


    Nota :
    Comme quoi une opération anodine comme un copié-collé dans un autre classeur peut s'avérer une opération plus fastidieuse que prévue...
    1. Oui en fait j'ai utilisé l'enregistreur des macros et qui me donne le code suivant :
      Sub exportindic3()
      '
      ' exportindic3 Macro
      '
      
      '
          Sheets("Indicateurs ").Select
          
          Sheets("Indicateurs ").Copy After:=Workbooks("Archivage.xlsx").Sheets(1)
          Windows("indicateurs last 8.xlsm").Activate
          Cells.Select
          Range("J6").Activate
          Selection.Copy
          Windows("Archivage.xlsx").Activate
          Range("A1").Select
          Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
              xlNone, SkipBlanks:=False, Transpose:=False
      End Sub


      - le probleme c'est que je doit ouvrir le fichier cible pour pouvoir exporter mes feuilles , en plus les graphes contenus dans mon fichier source ("indicateurs") se mettent à jour automatiquement après chaque export chose que je ne veut pas !
      merci d'avance
      1. Modérateur
        Bonjour,

        Avez-vous essayé via l'enregistreur de macro?