Copie valeurs
ilyasess
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 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.
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:
- Copie valeurs
- Copie cachée - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
4 réponses
Oui en fait j'ai utilisé l'enregistreur des macros et qui me donne le code suivant :
- 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
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
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 :
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 :
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 :
- 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 :
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é)
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 :
Que l'on appelle dans notre procédure principale, comme ceci :
Code complet :
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...
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 ").SelectNous voyons donc qu'il nous faut :
Cells.Select
Selection.Copy
Windows("Archivage.xlsx").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
- 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...
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.