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 :

Collage en gardant la mise en forme entre deux classeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Par défaut Collage en gardant la mise en forme entre deux classeurs
    Bonjour à tous.

    Je dois importer dans données d'un classeur à un autre.
    Sur mon classeur où toutes les données vont finir, j'ai un onglet recherche dont une colonne est rempli avec le lien des fichiers où je vais chercher les informations.

    Mon problème est sur la suite, j'ai testé deux méthodes mais je n'ai pas réussi à copier les données (avec la mise forme) comme je le souhaite.

    Je vous met le code de mes deux tentatives :

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Private Sub ImportButton_Click()
     
    'Déclaration des variables
    Dim i As Integer
    Dim n As Integer, Nbf As Integer
    Dim fichier() As String, nomfichier As String
     
    Dim xlApp As New Excel.Application
    Dim xlBook As New Excel.Workbook
    Dim xlSheet As New Excel.Worksheet
    Dim à_importer, cellule_début As Range
    Dim nl As Integer, l As Integer
     
    Cells(3, 8) = Now 'la cellule H3 va prendre la date comme valeur
     
    n = Cells(Rows.Count, 2).End(xlUp).Row 'On regarde la dernière ligne écrite pour la liste des fichiers
    Nbf = n - 5 'On définit le nombre de fichier par le nombre de la dernière ligne écrite moins 5
    Label1 = "Importation en cours" 'On informe via le Label que l'importation a commencé
     
     
    ReDim fichier(Nbf) 'On redimensionne le tableau chemin() à la dimension
     
    For i = 1 To Nbf 'On boucle sur tout les fichiers
        fichier(i) = Cells(i + 5, 1) 'On rentre le lien de chaque fichier dans le tableau chemin
    Next
     
     
    For i = 1 To Nbf 'Pour tous les fichiers
        nomfichier = fichier(i)
     
        Set xlBook = xlApp.Workbooks.Open(nomfichier) 'on ouvre le fichier
        For Each sheet In xlBook.Worksheets 'Pour chaque feuille du classeur
     
               Select Case sheet.Name 'Selon le nom de la feuille
     
                    Case "Fiche signalétique" 'Cas où le nom de la feuille est Fiche signalétique
     
                    xlBook.Activate 'on active le classeur d'où on veut retirer les informations
                    Worksheets(sheet.Name).Activate 'On active la feuille d'où on veut retiter les informations
                    nl = Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A
                    Set à_importer = Range("A2", "B" & nl) 'On selectionne la plage de données qui nous interesse
                    ThisWorkbook.Worksheets(sheet.Name).Activate 'On active ce classeur à la page qui nous interesse
                    l = Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A
                    Set cellule_début = Range("A" & (l + 1), "A" & (l + 1)) 'on définit la cellule de départ du "collage"
                    cellule_début.Resize(nl, 2).Cells.Formula = à_importer.Formula  'ajout des donnés de la feuille
     
     
     
                    Case "Avancement" 'Cas où le nom de la feuille est Avancement
     
                    Case "Jalons" 'Cas où le nom de la feuille est Jalons
     
                    Case "Risques revues" 'Cas où le nom de la feuille est Risques revues
     
                    Case "Risques revues ST" 'Cas où le nom de la feuille est Risques Revues ST
     
                    Case "Actions revues" 'Cas où le nom de la feuille est Actions revues
     
                    Case "Actions revues ST" 'Cas où le nom de la feuille est Actions revues SR
     
                    Case "Indicateurs ZNCR" 'Cas où le nom de la feuille est Indicateurs ZNCR
     
     
     
     
            End Select
        Next
        xlBook.Close (False) 'On ferme le classeur (sans enregistrer les changements)
        xlApp.Quit
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
    Next
     
     
    UserFormImport.Hide 'On ferme l'UserForm
    End Sub

    Pour le deuxième test, j'ai remplacé la partie après le Case "Fiche Signalétique" par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     xlBook.Activate 'on active le classeur d'où on veut retirer les informations
                    Worksheets(sheet.Name).Activate 'On active la feuille d'où on veut retiter les informations
                    nl = Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A
                    Range("A4", "B" & nl).Select 'On selectionne la plage de données qui nous interesse
                    Selection.Copy 'On la copie
                    ThisWorkbook.Worksheets(sheet.Name).Activate 'On active ce classeur à la page qui nous interesse
                    l = Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A
                    Range("A" & (l + 2), "B" & (l + 2 + nl - 3)).Select 'on selectionne la plage d'arrivée
     
                    'On colle en gardant la mise en forme :
                    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                    SkipBlanks:=False, Transpose:=False
                    Application.CutCopyMode = False
    Je suis à cours d'idée pour y arriver, si quelqu'un a une solution je suis preneur.
    J'espère avoir été clair. (Ou que mes commentaires sur le code vous feront comprendre ce que je fais)

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    utilise la constante xlpasteAll et pour les columnwidth il faut t y reprendre une 2 eme fois
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        Range("B8:C10").Copy
        Windows("toto.xlsx").Activate 'activation du classeur de destination
        Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'on colle tout a l'identique 
         Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' seul le columnwidth ne se fait pas avec xlpasteAll alors on colle le width 
    End Sub
    si cela aurait été sur le même classeur (entre 2 sheets ) le "copy destination:=" aurait suffi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Par défaut
    Je comprends ce que fait le xlpasteAll mais pas le ColumnWidths.
    As tu une explication rapide ou un lien l'expliquant à me donner?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ben c'est simple columnwidth ca veut dire quoi d'après toi?....largeur colonne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Par défaut
    ça va donc copier la largeur de la colonne c'est ça ? (désolé je suis un peu neuneu )

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 15
    Par défaut
    Bon...j'ai une erreur "la méthode PasteSpecial de la classe Range a échoué."

    Ce qui m’embête un peu...

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

Discussions similaires

  1. Ajout de ligne en gardant la mise en forme
    Par Steph_pas_douée dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/01/2010, 22h19
  2. [WD-2007] Envoyer le corps d'un doc par mail en gardant la mise en forme
    Par abillon dans le forum VBA Word
    Réponses: 7
    Dernier message: 13/11/2009, 11h00
  3. mise en forme entre classeur
    Par morgane32 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/09/2009, 16h45
  4. Réponses: 2
    Dernier message: 31/08/2006, 10h38

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