Copie valeurs

ilyasess Messages postés 4 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

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

    0
  2. ilyasess Messages postés 4 Statut Membre
     
    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
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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...
    0
  4. ilyasess Messages postés 4 Statut Membre
     
    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.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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...
      0