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 :

Problème de récupération du presse papier avec .GetFromClipboard / gettext [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 5
    Par défaut Problème de récupération du presse papier avec .GetFromClipboard / gettext
    Bonjour à tous,

    Je ne sais pas si quelqu'un à déjà été confronté à ce soucis mais je n'en ai pas trouvé trace ...

    je souhaite récupérer les valeurs contenues dans le presse papier dans une variable. (jusque la rien de bien méchant) normalement ça devrait fonctionner avec un petit :

    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
     
    Sub mise_en_variable_presse_papier()
     
    Dim commentaire_compile As String
     
     
            'Nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library."
            With New DataObject
     
                .GetFromClipboard
                commentaire_compile = .GetText(1)
     
            End With
     
    MsgBox commentaire_compile
     
    End Sub
    Le problème c'est que si je copie 3 cellules d'une même colonne disons ... la cellule A1 + A2 + A4

    et bien il me sort le contenu de toutes les valeurs situées entre A1 et A4 (alors que je n'ai pas copier la cellule A3)

    exemple :

    Va1 (sélectionné)
    Va2 (sélectionné)
    Va3 (non sélectionné)
    va4 (sélectionné)

    une fois les cellules sélectionnées je fait un copier (CTRL + C) puis je lance la macro. le résultat sera :

    "Val1 + Val2 + Val3 + Val4"

    si je ne passe pas par VBA et que je fais un CTRL + V alors la pas de soucis j'ai bien que mes 3 valeurs. la cellule A3 n'apparait pas dans le collage.

    un fichier exemple : test macro recup presse papier.xlsm

    Si quelqu'un à une idée de pourquoi il me récupère également les valeurs non copier situé entre la première et la dernière cellule je suis à l'écoute !

    Merci d'avance pour votre aide et vos idées !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 5
    Par défaut
    petit up , personne n'a d'idée ? vous avez testé et avez le même soucis que moi ?

    bon je vais donc devoir développer une solution de contournement

  3. #3
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,
    Juste pour dire que cela fait la même chose sur mon pc, Excel 365. Et ce qui est obtenu par .GetText(1) est le résultat contenu dans la cellule (et pas la formule qu'elle contient). Chaque contenu de cellule est séparé par un Chr(13)+Chr(10).
    Cordialement.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 5
    Par défaut
    Merci pour ton retour au moins ça me confirme que c'est un "bug"

    bon pour ceux qui tomberait sur ce Post j'ai contourné le problème par ce bout de code mais c'est dommage ce n'est plus "instantané" comme je passe à présent par la feuille (donc l'objet graphique) cela crée une latence de 1 seconde.

    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
     
     
    ' collage des valeurs copier par l'utilisateur précédemment.
        Cells(Range("A" & Rows.Count).End(xlUp).Row + 1, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
                        False, Transpose:=False   'colle uniquement les valeurs
     
            ' Clean mémoire du presse papier
            Application.CutCopyMode = False
     
    ' A ce niveau les valeurs collées sont bien les valeurs 1 + 2 et 4 la 3 est bien ignorée. 
    ' Ainsi je peux relancer le mode "copy" pour remettre les valeurs dans le presse papier. 
     
            Selection.Copy
     
     
            'Nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library."
            With New DataObject
                .GetFromClipboard
                commentaire_compile = .GetText(1)
            End With
     
            Selection.Clear ' libère la zone utilisée pour le traitement
            Cells(1, 1).Select

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 585
    Par défaut
    Bonjour,
    Dans l'exemple l'utilisateur sélectionne une cellule sur deux pour les placer dans le presse papier.

    Mais en réalité c'est toutes les cellules de la plage qu'il met dans le presse papier !

    Quand il fait un contrôle V c'est le range.areas qu'il copier sur la feuille.

    Quand il fait un getetext il récupère toutes les valeurs de la plage car getetext ne gère pas le range.areas!

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 252
    Par défaut
    hello,
    Thumb down a raison. D'après ce que j'ai constaté effectivement dans le presse papier il y a toutes les cellules. Excel se sert de la sélection en court pour faire le coller par ctrl+v. Si on enlève la sélection avant de faire le coller, rien ne se colle quand on fait le ctrl+V alors que dans le presse papier il y a toutes les cellules.
    Ami calmant, J.P

  7. #7
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 5
    Par défaut
    ok je comprends mieux...

    dans ce cas pensez vous que l'on peut récupérer dans une variable les valeurs du range.areas ?

    sinon je garde ma solution de contournement qui est de coller les valeurs puis de les recopier.

    le collage colle uniquement les valeurs voulues à la suite l'une de l'autre et la copy remet en mémoire les éléments voulus qui permettent de passer le texte dans une variable puis d'en faire ce que l'on veut.

    j'ai apporté une modification pour gérer le cas de ligne maquée :

    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
     
     
    Sub test()
     
    Dim commentaire_compile As String
     
     
    ' collage des valeurs copier par l'utilisateur précédemment.
         Cells(ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count + 1, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
                        False, Transpose:=False   'copier uniquement les valeurs
     
            ' Clean mémoire du presse papier
            Application.CutCopyMode = False
     
    ' A ce niveau les valeurs collées sont bien les valeurs 1 + 2 et 4 la 3 est bien ignorée.
    ' Ainsi je peux relancer le mode "copy" pour remettre les valeurs dans le presse papier.
     
            Selection.Copy
     
     
            'Nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library."
            With New DataObject
                .GetFromClipboard
                commentaire_compile = .GetText(1)
            End With
     
            Selection.Clear ' libère la zone utilisée pour le traitement
            Cells(1, 1).Select
     
     
    MsgBox commentaire_compile
     
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Si c'est pour avoir la liste des valeurs sélectionnées, ceci pourrait sans doute aussi convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        Dim cc As String, c As Range
        For Each c In Selection
            cc = cc & c.Value & vbLf
        Next c
        MsgBox cc
    End Sub
    Cordialement.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2020
    Messages : 5
    Par défaut
    Hello,

    C'était une idée mais que j'avais éliminée car ne fonctionne pas si j'ai des lignes filtrées.

    voir fichier joint : test macro recup presse papier.xlsm

    j'ai filtré sur une autre colonne qui masque la ligne de "valeur 3"

    L'utilisateur va naturellement sélectionner les 3 cellules restantes avec sa souris et enchainer par un CTRL + C puis lancer la macro.

    mais la, Excel considère que la sélection c'est tout ce qui se trouve entre la 1er et la dernière cellule.

    La boucle fonctionnerait uniquement si l'utilisateur fait case par case CTRL + CLIC pour sélectionner les 3 valeurs.

    C'était une bonne piste mais pour le moment je dois garder le contournement par la feuille graphique paste/copy ...

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

Discussions similaires

  1. Problème VBA EXCEL - WORD - presse papier
    Par kiwi01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2010, 09h17
  2. Réponses: 2
    Dernier message: 22/08/2009, 17h09
  3. [XL-2003] Nettoyage de la RAM et presse-papier avec VBA
    Par Romanuche dans le forum Excel
    Réponses: 4
    Dernier message: 03/08/2009, 18h27
  4. Réponses: 2
    Dernier message: 10/07/2008, 14h39
  5. Placer du texte dans le presse papier avec DOM
    Par Desraux dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/01/2005, 13h11

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