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 :

Presse papier vide ou non Valide [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 71
    Points
    71
    Par défaut Presse papier vide ou non Valide
    Bonjour à tous et toutes

    Dans mon application, je me sers de boucles sur un tableau tableau excel pour aller copier de multiples bouts de textes word et les coller dans un fichier word

    Parfois (rarement) cela fonctionne, plus souvent ca plante -à un avancement de l'application qui n'est pas toujours le même- avec le message suivant :

    Erreur 4605 / Cette méthode ou propriété n'est pas disponible car le presse papier est vide ou non valide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With objwordz
        .Selection.WholeStory
        .Selection.Copy
    End With
     
         objword.Selection.Paste
         vider 'appelle la sub vider le presse papier
         objwordz.Quit
    La ligne qui plante est "objword.Selection.Paste"

    La plupart des choses lues sur le net font état d'un presse papier qu'il faut vider. C'est pour cela que j'ai l'instruction vider juste après qui appelle le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub vider()
    'MsgBox "on vide !"
    Dim truc As DataObject
       Set truc = New DataObject
       truc.SetText ""
       truc.PutInClipboard
       Set truc = Nothing
    End Sub
    Avez vous une explication ? un conseil ?

    Merci d 'avance pour votre aide

    Danie S

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Essai d'affecter "Selection" à une variable et de travailler ensuite avec la variable.

    Hervé.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 71
    Points
    71
    Par défaut
    Bonsoir Theze et merci pour cette piste

    Puis je avoir quelques pistes complémentaires ?

    La variable sera de type Range ?

    J'ai essayé de me lancer dans le code suivant, mais je ne trouve pas le moyen d'affecter le contenu de la sélection à la variable

    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
    Private Sub CommandButton36_Click()
     
    Const wdStory = 6
    Const wdMove = 0
     
    Dim copie As Range
    Set objwordz = CreateObject("Word.Application")
    objwordz.Visible = True
    Set objDocz = objwordz.Documents.Open("e:\gen gen.doc")
     
    With objwordz
        .Selection.WholeStory
        .Selection.Copy
    End With
     
     
    Set copie = Selection
     
    Workbooks("modele.xls").Worksheets("f1").Range("A2").Value = copie
     
    End Sub
    Merci pour votre aide

    Daniel S

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    La variable est un Objet Selection qui te faut définir avec "Set" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim S As Selection
    Set S = Selection
    MsgBox S.Text
    Hervé.

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Une autre méthode éventuelle pour vider le presse papier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Déclarations en tête de module
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    '*********************************************************** 
    Private Sub Vider_PP()
        OpenClipboard 0
        EmptyClipboard
        CloseClipboard
    End Sub
    Sinon tu peux toujours vérifier si le presse papier contient quelque chose ou non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Déclarations en tête de module
    Private Declare Function CountClipboardFormats Lib "user32" () As Long
    '********************************************************
     
    If CountClipboardFormats <> 0 Then
        'si le presse papier n'est pas vide alors on copie
    Else
        'sinon...
    End If

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 71
    Points
    71
    Par défaut
    Bonsoir Theze et merci pour cette réponse rapide

    Voici le code mis à jour suite à tes indications

    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
    Private Sub CommandButton36_Click()
    Const wdStory = 6
    Const wdMove = 0
    Set objwordz = CreateObject("Word.Application")
    objwordz.Visible = True
    Set objDocz = objwordz.Documents.Open("e:\gen gen.doc")
    With objwordz
        .Selection.WholeStory
    End With
     
    Dim S As Selection
    Set S = Selection
    MsgBox S.Text
     
    End Sub
    J'ai un message d'erreur "incompatibilité de type sur la ligne Set S = selection

    Fring, je regarde tes éléments

    Merci

    Daniel S

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Il te faut cocher la référence "Microsoft Word 12.0 Object Library" -> "12.0" fonction de ta version d'Office.

    Hervé.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Points : 71
    Points
    71
    Par défaut
    Bonjour

    Elle l'est, mais après celle d'Excel et d'office

    Il fallait aussi que je fasse cette petite modif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set S = objwordz.Selection
    En modifiant mon code, j'ai réussi à coller le contenu de S dans un fichier Word "test". Mon souci est que je perds toute la mise en page du fichier source (styles titres entre autres)

    Merci pour ton aide

    Merci également à Fring, j'ai utilisé cette méthode et cela -après plusieurs tests- fonctionne parfaitement

    Bonne journée

    Daniel

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

Discussions similaires

  1. [XL-2010] Presse-papier vide ou invalide
    Par jfchappuis dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/04/2019, 15h03
  2. Réponses: 1
    Dernier message: 16/06/2015, 12h22
  3. Réponses: 2
    Dernier message: 18/05/2011, 22h48
  4. [1.x] Création d'un objet, form non valide et vide
    Par insane1 dans le forum Symfony
    Réponses: 3
    Dernier message: 02/11/2010, 09h20
  5. [XL-2000] Presse papier contient une grosse -> comment dire non en vba
    Par Shikam dans le forum Excel
    Réponses: 2
    Dernier message: 19/05/2010, 14h11

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