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
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.
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
- Copie écran samsung - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
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 754
6 mai 2014 à 16:20
6 mai 2014 à 16:20
Bonjour,
Avez-vous essayé via l'enregistreur de macro?
Avez-vous essayé via l'enregistreur de macro?
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
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 :
- 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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mai 2014 à 09:08
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 :
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...
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
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.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
7 mai 2014 à 15:21
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...
Ben non.
Pas si vous créez une feuille à chaque export...