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 :

Macro événementielle / coller le contenu du presse papier dans une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut Macro événementielle / coller le contenu du presse papier dans une cellule
    Bonjour,
    Je dois copier/coller un grand nombre de fois du texte depuis des mails reçu sur outlook dans des cellules de mon tableau.
    Pour éviter les CTtl V ou clics droits..., je souhaiterais que le texte copier se colle dans la cellule dès sélection de cette dernière.
    Je suppose le texte copier inscrit dans le presse papier et utilise le code suivant:

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
      If Not Application.Intersect(Target, Range("B2:B1000")) Is Nothing Then
     
     Dim MyData As New DataObject
     Dim strClip As String
     On Error GoTo NotText
     MyData.GetFromClipboard
     strClip = MyData.GetText
     
     Cells(ActivCell.Row, 2).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
     SkipBlanks:=False, Transpose:=False
     
     Target.Offset(0, 1).Select
     
    NotText:
    MsgBox Error
    Target.Offset(0, 1).Select
    End If
     End Sub

    qui me renvoie l'erreur "objet requis" dans la MsgBox MsgBox Error.


    Je me pose la question de savoir si un mail au format HTML ne poserait pas ce problème?????

    Merci pour tout début de solution qui me serait précieux!!!!!!!!!

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Error n'est pas un objet, mais une fonction. Cette fonction sait par exemple retourner le descriptif de l'erreur dont on lui communique l'index.
    Ce n'est pas la fonction Error, qui t'est utile, mais l'objet Err (et ses propriétés)

    J'observe par ailleurs (mais c'est encore autre chose) que tu passes par l'affichage d'une msgbox dans tous les cas (erreur ou non) !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Commence par supprimer le On Error, ce qui permettra d'avoir une vision plus précise et mieux localisée du problème.

    Il faudrait vérifier aussi si ton Target.Offset(0, 1).Select ne déclencherait pas lui-même ta macro Worksheet_SelectionChange ce qui entrainerait un cycle infini.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Le retour exact est: Erreur d'exécution '424': Objet requis.

    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Offset(0, 1).Select
    renvoie dans la cellule voisine de colonne donc pas de pb.


    Merci

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Le retour exact est: Erreur d'exécution '424': Objet requis.
    Quelle est la ligne de code désignée par le débugage ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Menhir

    Je crois avoir dit plus haut la raison de ce message : Error n'est pas un objet
    (sans préjudice de tout le reste ...)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Voici le nouveau code (plus d'Error, j'avais compris)
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
     
     
     
      If Not Application.Intersect(Target, Range("B2:B1000")) Is Nothing Then
     
     Dim MyData As New DataObject
     Dim strClip As String
     
     MyData.GetFromClipboard
     strClip = MyData.GetText
     
     Cells(ActivCell.Row, 2).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
     SkipBlanks:=False, Transpose:=False
     
     Target.Offset(0, 1).Select
     
     
    End If
     End Sub
    Ligne surlignée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(ActivCell.Row, 2).Select

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Plus de bug avec:

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
     
     
     
      If Not Application.Intersect(Target, Range("B2:B1000")) Is Nothing Then
     
     Dim MyData As New DataObject
     Dim strClip As String
     
     MyData.GetFromClipboard
     strClip = MyData.GetText
     
     Range("" & "B" & ActiveCell.Row & "").Select
     Selection.PasteSpecial
     
     
     
     
     Target.Offset(0, 1).Select
     
     
    End If
     End Sub
    A ceci près que le collage est une image me semble-t-il, un encart avec les carrés au tour que je peux supprimer comme une zone texte?????

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    il est evident que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     '......
    '......
     Target.Offset(0, 1).Select
     
     
     End Sub
    va te faire tourner en bourique et pour cause cela se passe dans l'evenement change donc tourne x fois
    deja pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    application.enableevents=false
    Target.Offset(0, 1).Select
    application.enableevents=true
    
    heu... c'est quoi ca ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("" & "B" & ActiveCell.Row & "").Select
    je traduis pour que tu comprenne ma question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(string vide & "B" & ActiveCell.Row & string vide).Select
    ce qui correspond a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(rien & "B" & ActiveCell.Row & rien).Select



    ensuite plutot que d'utiliser l'evenement selection change j'utiliserais par exemple le beforerightclick tu aurais le meme effet sans les inconveniant des events
    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

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Tu oublies:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Range("B2:B1000")) Is Nothing Then
    Le code ne se déclenche que dans la colonne B, quand on passe dans C, rien ne se passe....et de toute façon, c'est ce qui ce passe, donc aucun pb ici.
    Le fait que ce soit une image qui se colle et non du texte me pose problème en revanche

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Pour le: : PARFAIT, MERCI!!!!!

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Le fait que ce soit une image qui se colle et non du texte me pose problème en revanche
    ?????????? le dataobject ne peut contenir que du texte alors la je pige pas

    qu'est ce que tu mis dans le clipboard avant de paster ???????
    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

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je pense que ça vient de là, je croyais l'avoir mentionné au début de la discussion:

    Je copie du texte qui vient du corps d'un mail sur Outlook.....

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    et oui
    ce mail contient il une image ,logo ,canvas,ou autre ?
    comment tu copie ce mail ??(en selectionant le texte,execWeb ou autre fonction)

    si il y a une image dans ce que tu copie effectivement le dataobject ne supprime pas cette image il faut astucer et c'est un peu plus compliqué que ca car il faut passer par le clipboard window et non le pseudo clipboard de excel

    et entre nous ceci: te sert a quoi???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MyData.GetFromClipboard
     strClip = MyData.GetText
     
     Cells(ActivCell.Row, 2).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
     SkipBlanks:=False, Transpose:=False
    si tu a l'intention de te servir de strclip plus tard ok sinon ton getdata ne te sert a rien le paste le fait tout seul
    a la limite alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.value =strclip
    et tu vire ton paste
    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

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par Menhir Voir le message
    Commence par supprimer le On Error, ce qui permettra d'avoir une vision plus précise et mieux localisée du problème.[...]

    Il n'est pas nécessaire de supprimer le On Error... il suffit, dans les options du VBE, de choisir l'option "Arrêt sur toutes les erreurs" pour inhiber le gestionnaire d'erreurs. Après, il faut le remettre sur "Arrêt sur erreurs non gérées", bien entendu.

    Nom : 20180905_08.png
Affichages : 615
Taille : 35,8 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    VOILA LA SOLUTION:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.value =strclip

    PARFAIT!!!!!
    MERIC!!!!

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    et oui comme je t'ai dis tout a l'heure le dataobject ne peut contenir que du texte ,mais en faisant un paste tu colle TOUT!!! ce qu'il y a dans le clipboard et non le contenu de strclip
    au pire histoire d'en rire
    tu aurais du faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with MyData
    .GetFromClipboard
     strClip = .GetText
    .SetText strclip: .PutInClipboard
    end with
    et puis ton paste

    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

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

Discussions similaires

  1. coller le contenu du presse papier dans une variable
    Par lucassou dans le forum VB.NET
    Réponses: 5
    Dernier message: 01/05/2015, 09h38
  2. [XL-2002] Erreur lors de la récupération du contenu du presse-papiers dans une variable
    Par KiksGirl dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2011, 16h14
  3. [AC-2007] Coller le contenu du presse-papier dans un champ spécifique d'une table
    Par toumack dans le forum Modélisation
    Réponses: 3
    Dernier message: 26/05/2009, 14h49
  4. Réponses: 1
    Dernier message: 29/09/2007, 09h46

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