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 special (+ Mis en forme) ne fonctionne pas en Macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    Bonjour tout le monde

    Je rencontre un soucis au niveau collage spécial dans ma macro.
    Je m 'explique, à mon travail, j ai besoin de générer des fiches xl automatiquement, le fichier
    est créé rempli et ranger des un dossier (créé lui aussi s'il n'existe pas)
    Mon pb est que la mise en forme n'est pas conservée ( ça reste du domaine de l'esthétisme )
    mais je suis pointilleux ,lol.

    Voici la macro que j'utilise, je l'ai mainte fois utilisé pour différents programme, j'ai pas encore fait le ménage,
    excusez les quelques lignes superflus.

    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
    Private Sub CommandButton1_Click()
     
    If Sheets("PROG").Range("B3").Value = "" Then
    MsgBox ("Les cellules Client et NM doivent imperativement être renseignées !!")
    GoTo finish
    End If
    If Sheets("PROG").Range("B5").Value = "" Then
    MsgBox ("Les cellules Client et NM doivent imperativement être renseignées !!")
    GoTo finish
    End If
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim rng As Range
    Dim tx As String
    Dim sFichier As String
    Dim sDossier0 As String
    Dim sDossier_Client As String
    Dim sFichier_NM As String
     
    sDossier_Client = Sheets("PROG").Range("B5").Value
    sFichier_NM = Sheets("PROG").Range("B3").Value
    sDossier0 = ThisWorkbook.Path & "\" & sDossier_Client '& "\" & sDossier_Lct
    sFichier = ThisWorkbook.Path & "\" & sDossier_Client & "\" & sFichier_NM
     
        Dim Rep As Integer
        Rep = MsgBox("Voulez-vous continuez ?", vbYesNo + vbQuestion, "Confirmation")
        If Rep = vbNo Then Exit Sub
        If Rep = vbYes Then
     
    'Crée le dossier client s'il n'existe pas
    If Dir(sDossier0, 16) = "" _
    Then MkDir (sDossier0)
     
     
    On Error GoTo finish
     'On créer l'objet Excel
     Set xlApp = CreateObject("Excel.Application")
     'On défini le nombre d'onglets (ici 5)
     xlApp.SheetsInNewWorkbook = 1
     'On ajoute un classeur
     Set xlBook = xlApp.Workbooks.Add
     'On donne un nom au classeur
     xlBook.SaveAs (ThisWorkbook.Path & "\" & sDossier_Client & "\" & sFichier_NM)  '& ".xls")
     'On copi l'onglet à sauvegarder
        Cells.Select
        Selection.Copy
        Range("E11").Select
    'On rend le classeur visible
        xlApp.Visible = True
     
     'On créer l'objet onglet dans le nouveau classeur créé
     Set xlSheet = xlBook.Worksheets(1)
        xlSheet.Range("A1").Select
        xlSheet.Paste
        xlSheet.Range("E5").Select
        Application.CutCopyMode = False
     'On affecte un nom a l'onglet
        xlSheet.Name = "PROG"
        xlBook.Save
        xlBook.Close
        End If
    finish:
    End Sub
    et ça c'est le bout de code que j'aimerai y incérer, qui marche tel quel, mais pas ds cette macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False
    Merci à celles et à ceux qui s'arrêteront afin d'essayer de m'aider

    Bonne journée

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    déjà je ne comprends pas pourquoi ce code ouvre une deuxième instance d'Excel alors qu'il est déjà ouvert !
    De plus ce code ne comporte pas de collage spécial !

    Et un fichier sauvegardé conservant forcément la mise en forme
    tout comme un simple Copier / Coller, juste en activant l'Enregistreur de macro …


    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    Bonjour Marc-L,

    Merci de t'être arrêté pour m'aider

    oui, j'ai sans doute pas été assez clair, j aimerai rester avec une interface unique (interface qui évoluera ensuite en USF seul)
    ça je sais faire, différents operateurs seront amenés à faire des manip (save, save as etcc.....) Je voudrais éviter de passer derrière
    et faire le ménage.
    La macro que j'ai donnée , marche très bien en l'état mais sans la mis en forme souhaitée .
    Le second bout de code, c'est ce que j'obtiens à avoir avec l'enregistreur de macro, mon souhait donc.

    J'arrive pas à associer les deux.

    Merci pour ton temps.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Autant pour moi, je n'avais pas vu le second code perturbé par l'horreur du premier …
    Insère-le juste après la sélection de la plage de destination ou
    encore mieux sans sélectionner la plage mais directement rattachée à celle-ci !

    Sans compter la copie directe en une seule ligne de code via la méthode Range.Copy comme détaillée dans l'aide VBA !
    Et si la mise en page de la feuille source est correcte, l'astuce est de directement copier cette feuille …

  5. #5
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    Re

    Oui, j'ai essayé plusieurs bidouillage dont ton idée et rien.
    Là, la seconde feuille reste ouverte, le collage ne s'effectue pas.

    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
    xlApp.Visible = True
     
     'On créer l'objet onglet dans le nouveau classeur créé
     Set xlSheet = xlBook.Worksheets(1)
        xlSheet.Range("A1").Select
            Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False
        'xlSheet.Paste
        xlSheet.Range("E5").Select
        Application.CutCopyMode = False
     'On affecte un nom a l'onglet
        xlSheet.Name = "PROG"
        xlBook.Save
        xlBook.Close
        End If
    finish:
    End Sub

    Ensuite y avait cette possibilité en lui rappelant de quelle feuille on parle pour le collage et rien non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        xlSheet.Range("A1").Select
            xlSheet.Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False
        'xlSheet.Paste
        xlSheet.Range("E5").Select
    Il ne comprend pas "selection" dans la ligne de code

    Range.Copy ???

    Je vais me pencher sur la chose, ce sera mieux que de tourner en rond

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Il suffit juste de respecter le BA-BA, à savoir le modèle objet d'Excel !

    ClasseurSource.FeuilleSource.RangeSource.Copy ClasseurDestination.FeuilleDestination.PremièreCelluleDestination

    comme expliqué dans l'aide VBA et son exemple …

  7. #7
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    :/ Je suis parti d'une macro déjà bancale, je v recommencer proprement de 0 en tournant autour du Range.copy

    Je reviendrai vers toi ensuite, sinon je clôturerai la discussion.

    A bientôt et encore merci pour ton temps

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

Discussions similaires

  1. [XL-2010] Raccourci clavier ne fonctionne pas - la macro commence mais s'arrête au début
    Par Dédé6621 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/12/2016, 22h56
  2. FreeAndnil(Form) ne fonctionne pas dans un create ?
    Par BuzzLeclaire dans le forum Langage
    Réponses: 2
    Dernier message: 13/11/2009, 16h34
  3. form.recordsource fonctionne pas
    Par benjisan dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/12/2007, 09h04
  4. Changement mise en forme ne fonctionne pas
    Par choubak dans le forum IHM
    Réponses: 10
    Dernier message: 16/05/2007, 13h56
  5. Réponses: 7
    Dernier message: 24/01/2006, 11h03

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