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 - Problème de collage spécial Valeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Compta - Gestion Paie RH
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Compta - Gestion Paie RH
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Par défaut VBA - Problème de collage spécial Valeur
    Bonjour,
    Je code une macro qui me permet de copier coller des infos contenues dans des colonnes (sur une première feuille contenant le résultat d'une extraction d'une base de paie) puis de les recopier dans un onglet individuel ; ce sont des infos sur des salariés, je parcours ma 1ère colonne 'nom salarié' pour boucler dessus et aller copier/coller les infos qui m'intéressent dans chaque onglet individuel de salarié

    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
     
    Private Sub CommandButton1_Click()
    Range("A1").Activate
     
    ' je compte le nombre de cellules non vides dans ma 1ère colonne
    ' ce nombre me sert ensuite pour ma boucle while/wend
     
    Dim nbcells As Integer  
    nbcells = Application.WorksheetFunction.CountA(Feuil1.Range("$A:$A"))
     
    Dim x As Integer
    x = 1
     
    While x < nbcells
     
     'parcours de la colonne "NOMS"                                           
        x = x + 1
        Cells(x, 2).Select
        Dim horaire_salarie As Double
     
    'copie de la valeur...
        horaire_salarie = ActiveCell.Value                 
        Selection.Copy
     
     'retour sur la valeur "NOM"                                        
        ActiveCell.Offset(0, -1).Select
     
     'activation de l'onglet correspondant au nom                   
        Sheets(ActiveCell.Value).Activate
     
    ' selection de la colonne horaire et recherche de la 1ère cellule vide              
        ActiveSheet.Range("E6").Activate                 
        Selection.End(xlDown).Select                       
        Selection.Offset(1, 0).Select
     
    ' collage                       
        ActiveSheet.Paste
     
    ' retour sur ma première feuille pour poursuivre la boucle
        Sheets("EXTRACTION_GA").Activate
        Range("A1").Activate
     
    Wend
    End Sub
    Je voudrais que les infos collées le soient en collage spécial valeur ;
    or si j'essaie à la place de ActiveSheet.Paste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
    SkipBlanks_:=False, Transpose:=False
    j'ai un message d'erreur
    je ne sais pas comment appliquer PasteSpecial dans ce cas ; j'ai fait un enregistrement de macro pour avoir le code d'un collage spécial valeur, mais sur une cellule donnée, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("A1").Select
    Selection.Copy
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
    SkipBlanks_:=False, Transpose:=False
    Je suppose que la méthode PasteSpecial n'est pas gérée par l'objet ActiveSheet ? Donc j'essaie de remplacer ActiveSheet.Paste par Selection.Paste, et ça ne marche pas :
    je ne comprends pas pourquoi je ne peux pas coller par Selection.Paste au lieu de ActiveSheet.Paste ; pourtant après avoir désigné la première cellule vide comme cellule de destination pour le collage, j'ai bien une cellule sélectionnée ?
    désolé si je ne suis pas très clair, je débute en VBA et je galère un peu

    Merci d'avance

    Pierre

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 571
    Par défaut
    Bonjour


    Si tu enlevais toutes sélections et activations inutiles, cela accélérerais le code et éviterais sans doute des problèmes.
    Le pastespecial ne pose pas de problème en soi : il doit y avoir un autre problème.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si c'est pour coller les cellules ayant une formule de la colonne A de la feuille (CodeName Feuil1) vers la feuille dont le CodeName est Feuil2, il suffit d'écrire le code ci-dessous.
    S'il s'agit de cellules contenant une constante il faut utiliser la ligne qui se trouve en commentaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Feuil1.Columns("A:A").SpecialCells(xlCellTypeFormulas, 7).Copy
    ' Feuil1.Columns("A:A").SpecialCells(xlCellTypeConstants, 7).Copy
    Feuil2.Range("A1").PasteSpecial Paste:=xlPasteValues
    [EDIT]
    J'ai proposé la méthode SpecialCells parce-qu'il m'avait semblé que toutes les cellules de la colonne A ou en tout les cas les cellules de la plage à copier n'étaient pas remplies.
    Sinon il suffit bien entendu d'utiliser cette instruction pour copier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Columns("A:A").Copy
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rng As Range: Set rng = Feuil1.Range("A1:A21")
    rng.Copy
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Problème de collage de valeur
    Par mmanta1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2008, 09h27
  2. autoriser un seul utilisateur à faire un copier collage spécial valeur
    Par fafa7777 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 10h43
  3. uniquement copier collage spécial valeur
    Par fafa7777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/06/2008, 18h25
  4. Collage spécial : valeurs
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2008, 18h03
  5. Réponses: 13
    Dernier message: 15/06/2006, 11h31

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