IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Copie de Feuille sans liaison


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut [VBA-E] Copie de Feuille sans liaison
    Bonjour tout le monde

    J'utilise un classeur comme "logiciel" avec une partie affichage et bien sur une partie code seulement l'ensemble est assez lourd plus de 10 Mo.

    Je souhaiterais ne conserver qu'une partie de 3 feuilles du classeur.

    Jusqu'à maintenant j'ai utilisé un nouveau classeur ou je copie les informations qui me sont nécessaires. Seulement lors de la copie, il crée des liaisons vers le classeur précédent

    Comment faire pour éviter d'avoir ces liaisons ??

    Merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu as le code de la copie ..? , sinon utilise l'enregistreur de macro ... et effectue un copie, puis collage spécial Valeur

  3. #3
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Premièrement voici le code que j'ai utilisé jusqu'à maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Function SaveClasseur()
      Dim ClasseurSource As Workbook
      Dim ClasseurCible As Workbook
     
      Set ClasseurSource = ActiveWorkbook
     
      ClasseurSource.Sheets(3).Select
      Range("A1:H885").Select
      Selection.Copy
     
      Application.Workbooks.Add
      Set ClasseurCible = ActiveWorkbook
     
      'copie de la taille des lignes et des colonnes   
      For i = 1 To 8
        ClasseurCible.Worksheets(3).Columns(i).ColumnWidth = ClasseurSource.Worksheets(3).Columns(i).ColumnWidth
      Next i
     
      For i = 1 To 885
        ClasseurCible.Worksheets(3).Rows(i).RowHeight = ClasseurSource.Worksheets(3).Rows(i).RowHeight
      Next i
     
      Sheets(3).Select
      Range("A1").Select
      ActiveSheet.Paste
      Application.CutCopyMode = False
     
    End Function
    Deuxiemement j'ai étudier rapidement la fonction 'collage spécial', ca m'a d'ailleurs permis de resoudre ce premier problème, seulement cette solution ne permet pas de copier les images.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tiens tu pourrai essayer ainsi : copie de la feuille compléte dans nouveau classeur puis suppression des formules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Function SaveClasseur()
      Dim ClasseurSource As Workbook
      Dim ClasseurCible As Workbook
     
      Set ClasseurSource = ActiveWorkbook
     
      ClasseurSource.Sheets(3).Copy 'Copie la feuille compléte..
      Set ClasseurCible = ActiveWorkbook 'Au cas ou .. pour garder un accés au nouveau classeur
     
      'Suppression des formules
      Cells.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
          False, Transpose:=False
        Application.CutCopyMode = False
        Cells(1, 1).Select
    End Function

  5. #5
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    oui seulement je souhaiterais conserver les formules et les liaisons entre les différentes feuilles du classeur afin de pouvoir faire des modifications ulterieures sans avoir a rechercher toutes les cellules à modifier.

    Par contre j'ai pensé à une autre solution qui consiste à supprimer toutes informations inutiles voire même des feuilles entières et de l'enregistrer sous un nouveau nom.

    Mais si on pousse cette méthode à l'extrême est-il possible d'enregistrer le nouveau classeur sans la partie code qui est inutile ??

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour,
    Ce que tu peux faire est de créer un nouveau classeur, de copier tes feuille et de rétablir les liaisons en remplaçant simplement le nom du classeur. Je dois avoir ça dans mes papiers.
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub LiaisonsModifierSupprimer()
          Chemin = ActiveWorkbook.path + "\" & ActiveWorkbook.Name 'Nouveau chemin à indiquer
          'MsgBox Chemin
          aLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
          If Not IsEmpty(aLinks) Then
               For i = 1 To UBound(aLinks)
                    'If MsgBox("Modifier la liaison " & i & ":" & Chr(13) & aLinks(i), vbYesNo, "") = vbYes Then
                        ActiveWorkbook.ChangeLink aLinks(i), Chemin, xlExcelLinks
                    'End If
               Next i
          End If
    End Sub
    Tu testes, je n'ai pas utilisé depuis quelques temps

    Tu dis

    A+

  7. #7
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    je te remercie

    apres test j'ai message d'erreur : Erreur d'exécution '1004':

    Une des formules de cette feuille de calcul cntient une ou plusieurs références externes non valides.

    Vérifier que le chemin d'accès, le classeur, le nom de la plage et les références de cellules de toutes les formules sont corrects.

    J'ai vérifier qu'il n'y ai aucune autre liaison mais la seule existante est celle de mon classeur source.

    Voici mon code ou cas l'erreur viendrait de ce dernier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Sub Macro3()
        'copie de la premiere feuille
        Windows("test_04-24_2.xls").Activate
        Sheets(1).Select
        Range("A1:K38").Select
        Selection.Copy
        Windows("Classeur2.xls").Activate
        Sheets(1).Select
        Sheets(1).Name = "Saisie Devis"
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
     
        'copie de la seconde feuille
        Windows("test_04-24_2.xls").Activate
        Sheets(2).Select
        Range("A1:H59").Select
        Selection.Copy
        Windows("Classeur2.xls").Activate
        Sheets(2).Select
        Sheets(2).Name = "Calcul de Prix"
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
     
        'copie de la troisième feuille
        Windows("test_04-24_2.xls").Activate
        Sheets(3).Select
        Range("A1:H885").Select
        Selection.Copy
        Windows("Classeur2.xls").Activate
        Sheets(3).Select
        Sheets(3).Name = "Devis"
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
     
        Call LiaisonsModifierSupprimer
    End Sub
     
    Sub LiaisonsModifierSupprimer()
          Chemin = ActiveWorkbook.Path + "\" & ActiveWorkbook.Name 'Nouveau chemin à indiquer
          'MsgBox Chemin
          aLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
          If Not IsEmpty(aLinks) Then
               For i = 1 To UBound(aLinks)
                    'If MsgBox("Modifier la liaison " & i & ":" & Chr(13) & aLinks(i), vbYesNo, "") = vbYes Then
                        ActiveWorkbook.ChangeLink aLinks(i), Chemin, xlExcelLinks                 
                    'End If
               Next i
          End If
     
    End Sub

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, je crois comprendre. La macro est dans le fichier source. Sauvegarde le nouveau classeur avant de modifier les liaisons. Puis, remplace cette ligne par le vrai chemin et le vrai nom du nouveau classeur.
    Chemin = ActiveWorkbook.Path + "\" & ActiveWorkbook.Name 'Nouveau chemin à indiquer
    Code Exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Chemin = "D:\TonRep\"
    Chemin = Chemin + "NomDuNouveauClasseur.xls"
    Tu dis

  9. #9
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    Desole mais c n'est pas ca j'ai toujours le meme problème meme une fois sauvegarder, de plus le chemin recupéré est bon une fois qu'une sauvegarde a été faite.

    je te mets tout de même le nom des chemin ou cas ou je serais un boulet

    chemin = "C:\documents and Settings\Yota\Mes Documents\Stage\Classeur3.xls"

    ALinks = "C:\documents and Settings\Yota\Mes Documents\Stage\Evolution Logiciels\test_04-27.xls"

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    les liens que tu ve conserver c'est des liens entre les 3 feuilles copiées..? , si oui si tu copy simultanément les 3 feuilles ... les liens entre les 3 feuilles sont conservés...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Array("Feuil1", "Feuil2","Feuil3")).Copy

  11. #11
    Membre confirmé Avatar de Ania
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Par défaut
    je te remercie, c'est tout à fait ce qu'il me fallait.

    je gere la suppresion des informations inutiles apres la copie

    Un grand merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie de feuille sans liaison
    Par gege765 dans le forum Conception
    Réponses: 1
    Dernier message: 20/10/2012, 17h03
  2. [VBA-E] imprimer une feuille sans connaitre le nom
    Par srame dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/04/2007, 09h02
  3. vba(excel97)Copie une feuille
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/10/2006, 15h33
  4. [VBA-E]copie de feuille excel
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/02/2006, 14h20
  5. [VBA][Excel] Copie de feuille a l'identique
    Par le_sonic dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2006, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo