Copie valeurs

Fermé
ilyasess Messages postés 4 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014 - 6 mai 2014 à 13:52
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 7 mai 2014 à 15:21
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.

A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
6 mai 2014 à 16:20
Bonjour,

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

0
ilyasess Messages postés 4 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014
Modifié par pijaku le 7/05/2014 à 07:46
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 mai 2014 à 09:08
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
ilyasess Messages postés 4 Date d'inscription mardi 6 mai 2014 Statut Membre Dernière intervention 7 mai 2014
7 mai 2014 à 15:06
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
7 mai 2014 à 15:21
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