Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion joquetino
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

joquetino

Guest
Bonsoir,

J'aimerais vous poser une question, vous expert du Excel.
J'ai un gros fichier qui est lié à un autre fichier, et cette liaison m'empêche de partager.

La solution à laquelle je viens de penser, serait de copier ce gros fichier dans un autre, en ne copiant que les valeurs : de cette façon, je n'aurais plus ce problème de liaison.

Seulement, c'est assez fastidieux à faire, vu la taille du fichier. Une macro VBA pourrait-elle être envisageable dans ce cas précis?

Merci d'avance.
 
Re : Macro VBA

Je ne suis pas le plus grand des experts, cependant, peut tu envoyer les fichiers?
( vu que ton fichier est gros tu ne pourras pas l'uploader dans ce cas fait un petit exemple du meme style, apres il suffira d'elargir la macro)

et donne plus de precision sur les valeurs que tu veux copier, ou sont elles, format, y a t'il plusieurs pages etc comment tu veux faire la copie etc, car ce sont des parametres qu'il va falloir integrer dans la macro.

Avec toute ces donnees on pourra certainement mieux t'aider!
 
Re : Macro VBA

Bonsoir et merci pour ta réponse,

alors le fichier sur lequel je travaille, en plus d'être volumineux, contient quelques données confidentielles. Je ne peux donc pas l'uploader pour illustrer mon problème. J'ai crée deux fichiers pour essayer de montrer ce que je souhaiterais faire.

Dans le fichier classeur1.xls, j'ai 5 onglets dont chacun comporte un type d'informations. J'ai mis sur chaque onglet un tableau très simple, qui a un format particulier (motif notamment).

Ce que j'aimerais, c'est que l'utilisateur puisse déclencher une macro VBA à partir de ce classeur1.xls. Cette macro aura pour objectif de copier (valeurs + format) les données du classeur1.xls dans le classeur2.xls, en ayant vider ce dernier au préalable (dans mon exemple, il est vide pour le moment). Le format ainsi que les valeurs devront être copiées. Les données présentes sont soit des entiers, soit des chaines de caractère.

Suis-je explicite? N'hésitez pas dans le cas contraire.
SI qq pouvait m'aiguiller sur la façon de procéder ...

Merci d'avance.
 

Pièces jointes

Re : Macro VBA

Bonjour,

J'aurais une petite question par rapport au code que tu m'as gentillement mis à disposition.
Voici le code :
PHP:
Private Sub cmdCopieValeurs_Click()
    Dim wshFeuille  As Worksheet
    Dim wbkBook     As Workbook
    
    ' copier toutes les feuilles dans un nouvel onglet
    Sheets.Copy
    
    ' identifier le nouveau clmasseur
    Set wbkBook = ActiveWorkbook
    
    ' détruire le bouton
    ActiveSheet.Shapes(1).Delete
    
    For Each wshFeuille In wbkBook.Sheets
        ' activer la feuille
        wshFeuille.Select
        ' copier toutes les cellules
        wshFeuille.Cells.Copy
        ' coller en valeur
        wshFeuille.Cells.PasteSpecial xlPasteValues
        ' curseur en A1
        wshFeuille.Range("A1").Select
    Next
    
    ' quitter le mode copie
    Application.CutCopyMode = False
    
    ' libérer la mémoire des variables objet
    Set wbkBook = Nothing: Set wshFeuille = Nothing
End Sub

J'aimerais que la macro ne copie pas les feuilles cachées. Pour le moment, si j'exécute la macro en cachant une feuille, il y a une erreur : est-ce normal? Et comment faire pour contourner l'erreur?

Merci d'avance.
 
Re : Macro VBA

salut joquetino,

oui, effectivement, si la feuille est cachée, ça plante.
donc en modifiant un peu, ça donne ceci (modifs en bleu) :
Code:
Private Sub cmdCopieValeurs_Click()
    Dim wshFeuille  As Worksheet
    Dim wbkBook     As Workbook
    
    ' copier toutes les feuilles dans un nouvel onglet
    Sheets.Copy
    
    ' identifier le nouveau clmasseur
    Set wbkBook = ActiveWorkbook
    
    ' détruire le bouton
    ActiveSheet.Shapes(1).Delete
    
    For Each wshFeuille In wbkBook.Sheets
[COLOR=Blue]        If wshFeuille.Visible = xlSheetVisible Then[/COLOR]
            ' activer la feuille
            wshFeuille.Select
            ' copier toutes les cellules
            wshFeuille.Cells.Copy
            ' coller en valeur
            wshFeuille.Cells.PasteSpecial xlPasteValues
            ' curseur en A1
            wshFeuille.Range("A1").Select
[COLOR=Blue]        End If[/COLOR]
    Next
    
    ' quitter le mode copie
    Application.CutCopyMode = False
    
    ' libérer la mémoire des variables objet
    Set wbkBook = Nothing: Set wshFeuille = Nothing
End Sub
 
Re : Macro VBA

Merci Kobaya. Une dernière petite question, et c'est promis je ne t'embête plus : si je souhaite qu'il me copie uniquement les 5 premières feuilles (donc si le classeur a 8 feuilles, seules les 5 premières seront copiées), quelles modifs dois-je apporter au code?

Va falloir que je me plonge dans un bon bouquin pour apprendre le VBA : au passage, tu me conseilles lesquels?

Un grand merci.
 
Re : Macro VBA

Bonsoir à tous,

j'arrive un peu tard sur le sujet, mais une simple rupture de la ou des liaisons ne sufirait-elle pas?
si nécessaire, ça peut aussi s'automatiser avec un code du genre :
Code:
    liaisons = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
    For i = 1 To UBound(liaisons)
        ActiveWorkbook.BreakLink _
            Name:=liaisons(i), _
            Type:=xlLinkTypeExcelLinks
    Next

A+
 
Re : Macro VBA

Salut ODVJ,

Je n'avais pas pensé à ça ! J'essaierai de m'en souvenir 🙂.

Pour le nombre limité de feuilles à copier :
Code:
Private Sub cmdCopieValeurs_Click()
    Dim wshFeuille  As Worksheet
    Dim wbkBook     As Workbook
    
    ' copier toutes les feuilles dans un nouvel onglet
    Sheets.Copy
    
    ' identifier le nouveau clmasseur
    Set wbkBook = ActiveWorkbook
    
    ' détruire le bouton
    ActiveSheet.Shapes(1).Delete
    
    For Each wshFeuille In wbkBook.Sheets
        If wshFeuille.Visible = xlSheetVisible Then
            ' activer la feuille
            wshFeuille.Select
            ' copier toutes les cellules
            wshFeuille.Cells.Copy
            ' coller en valeur
            wshFeuille.Cells.PasteSpecial xlPasteValues
            ' curseur en A1
            wshFeuille.Range("A1").Select
        End If
    Next
    
    ' empêche l'affichage du message de confirmation d'effacement
    Application.DisplayAlerts = False
    
    ' supprimer les onglets au-delà du 5e
    Do Until wbkBook.Sheets.Count = 5
        wbkBook.Sheets(wbkBook.Sheets.Count).Delete
    Loop
    
    Application.DisplayAlerts = True
    ' quitter le mode copie
    Application.CutCopyMode = False
    
    ' libérer la mémoire des variables objet
    Set wbkBook = Nothing: Set wshFeuille = Nothing
End Sub
Pour le bouquin, je dirais "VBA pour Excel 2003", de John WALKENBACH, éditions Eyrolles. Un gros pavé de +40€ très complet mais très accessible (enfin, je pense ; je n'ai fait que le feuilleter, mais je pense que je vais craquer un jour...)
 
Re : Macro VBA

Bonsoir,

Je me permets de vous reposer une question à propos du code VBA que vous m'avez proposé, qui m'est très utile.
J'aimerais adapter le code suivant :
Code:
Private Sub cmdCopieValeurs_Click()
    Dim wshFeuille  As Worksheet
    Dim wbkBook     As Workbook
    
    ' copier toutes les feuilles dans un nouvel onglet
    Sheets.Copy
    
    ' identifier le nouveau clmasseur
    Set wbkBook = ActiveWorkbook
    
    ' détruire le bouton
    ActiveSheet.Shapes(1).Delete
    
    For Each wshFeuille In wbkBook.Sheets
        If wshFeuille.Visible = xlSheetVisible Then
            ' activer la feuille
            wshFeuille.Select
            ' copier toutes les cellules
            wshFeuille.Cells.Copy
            ' coller en valeur
            wshFeuille.Cells.PasteSpecial xlPasteValues
            ' curseur en A1
            wshFeuille.Range("A1").Select
        End If
    Next
    
    ' empêche l'affichage du message de confirmation d'effacement
    Application.DisplayAlerts = False
    
    ' supprimer les onglets au-delà du 5e
    Do Until wbkBook.Sheets.Count = 5
        wbkBook.Sheets(wbkBook.Sheets.Count).Delete
    Loop
    
    Application.DisplayAlerts = True
    ' quitter le mode copie
    Application.CutCopyMode = False
    
    ' libérer la mémoire des variables objet
    Set wbkBook = Nothing: Set wshFeuille = Nothing
End Sub

J'aimerai, que la macro copie les onglets du classeur courant, dans un fichier existant, fichierTest.xls, et non dans un nouveau fichier : il faudrait donc effacer les données des onglets du fichier "fichierTest.xls" dans un premier temps, puis copier les données.
Si vous pouviez me donner des pistes pour résoudre mon pb, ça serait super sympa.

Un grand merci d'avance.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
52
Affichages
3 K
  • Question Question
Réponses
7
Affichages
343
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…