Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 19h17   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Par défaut Copier un bouton de commande AVEC son code par macro word

Bonjour à tous,

En espérant être sur le bon forum ?

Ma question est simple mais en même temps je ne trouve rien dessus :

J'ai fait une macro (code VBA) dans un formulaire WORD avec des boutons de commandes pour effectuer des tâches particulières (copie de zone ou suppression), mais je souhaite que le bouton de commande AINSI que son code puisse être copié lorsqu'il est dans la zone sélectionnée !

Car j'arrive bien à copier la zone avec le bouton, mais le bouton n'a plus son code vba attaché : il ne sert donc plus à rien...

Comment puis-je copier la 'zone' et que le bouton de commande conserve son code associé : "Private Sub CommandButton1_Click()"?
D'avance merci

PS : exemple code du bouton de commande
Code :
1
2
3
4
5
 
ActiveDocument.Bookmarks(ZONE).Select
    Selection.Copy
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.PasteAndFormat Type:=wdFormatOriginalFormatting
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 21h35   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Le problème, c'est que le nom du bouton de commande va être incrémenté après sa copie.
Ce qui fait que le code ne va plus fonctionner.

Que souhaites tu faire exactement, on peut peut-être y parvenir autrement ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 22h27   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bonsoir,
Effectivement le bouton de commande voit son nom incrémenté mais justement je pensais qu'on pouvait copier le bouton et que le code se retrouverait dans la nouvelle "Private Sub CommandButtonX_Click()" ?
En fait le but est de pouvoir ajouter ou supprimer une zone du formulaire à l'identique... 2 boutons en debut de la zone du formulaire, dont Un qui copie la zone pour la coller après (on dédouble en quelque sorte) et un autre bouton pour permettre de supprimer la zone copiée !
Ainsi chaque zone se retrouve avec ses 2 boutons...
Je ne sais pas si j'ai été clair ?
En tout cas tout idée serait bienvenue, merci.
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 09h43   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Pourquoi ne pas exclure les boutons du document pour les mettre dans une barre d'outils ou dans un onglet.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 10h06   #5
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Il s'agit d'un formulaire, je veux éviter toute interaction avec quoi que ce soit, le document doit s'autoporter tout seul, l'avantage du bouton dans le texte c'est qu'il porte avec lui son point d'insertion, nul besoin de chercher où débute la zone à copier ou à supprimer dans le document...

Donc pas de solution ? à priori

Merci je vais réfléchir à faire autrement alors, mais je n'ai pas encore d'idée...
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 10h39   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Les barres d'outils et les onglets sont "autoportés" dans le document.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 18h47   #7
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Oui mais cela ne me facilite pas du tout la tâche de jouer avec des boutons à l'extérieur du texte...
Dernière petite question : Puis-je en VB balayer les "objets" du document (par exemple rechercher tous les "boutons de commande" et voir si un code leur est associé sur l'évènement "Click()" et sinon leur ajouter ? Tout ca en VB...

Merci
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h08   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Oui, on peut intervenir sur le code par le code.
Mais pour des raisons de sécurités, il faut autoriser ces manipulations de façon explicite et ce pour et par tous les utilisateurs.

Voilà le lien d'un tuto pour la manipulation du code par le code.

http://silkyroad.developpez.com/VBA/VisualBasicEditor/
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h37   #9
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bonjour et merci pour ce tuto qui m'a l'air très très bien fait...
Je vais tenter de comprendre comment je vais pouvoir lors de la copie de la zone écrire les lignes de code pour l'évènement "Click" du bouton de commande qui a été copié...
Dans une première étape, je cherche le nom de ce nouveau bouton de commande, puis en une seconde étape j'écris dans "ThisDocument", la procédure "Private Sub CommandButtonX_Click()"... et ceci à chaque copie

J'essaye et vous tiens au courant du résultat
Merci
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h10   #10
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bonjour,

Je bloque sur la première étape, qui consiste à rechercher l'existence d'un bouton de commande dans le document :
Code :
1
2
3
4
5
Dim Ctrl As Controls
For Each Ctrl In ActiveDocument.VBProject.VBComponents("ThisDocument").Controls
    Debug.Print Ctrl.Name 'Nom
    Debug.Print TypeName(Ctrl) 'Type de contrôle
Next Ctrl
Ne fonctionne pas avec l'erreur 438 (méthode non gérée...)
C'est encore pire avec le code ci-dessous :
Code :
1
2
3
4
5
Dim Obj As OLEObject
For Each Obj In ActiveDocument.VBProject.VBComponents("ThisDocument").OLEObjects
	Debug.Print Obj.Name 'Nom
	Debug.Print TypeName(Obj.Object) 'Type de contrôle
Next Obj
Quelqu'un a t'il une idée pour lister tous les "objets" de mon document en VB Word ?
D'avance merci de votre aide
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h40   #11
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bonjour,

Y a t'il quelqu'un qui sait pourquoi le code pour lister la collection d'objet "Controls" ne marche pas sous WORD ?

D'avance merci de votre aide.
Bonne journée
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h51   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Simplement parce que les controls du document ne sont pas dans les composant VBA.

en fait, tu dois vérifier les controls du document et vérifier ensuite les composants VBA.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h04   #13
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Merci pour l'explication, mais comment avec du code VBA, puis-je vérifier les controls du documents alors ?
Car je croyais qu'avec "For Each Ctrl In ActiveDocument.VBProject.VBComponents("ThisDocument").Controls" me permettrait de voir les controls du document...
Malheureusement je ne connais pas et ne trouve pas non plus la syntaxe pour chercher sans VBComponents ?
Pouvez-vous m'aiguiller vers la bonne syntaxe ? d'avance merci
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h48   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 345
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 345
Points : 29 255
Points : 29 255
Salut,

Il faut faire le tour des olecontrols qui sont des inlineshapes.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 23h34   #15
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Merci encore pour cet éclaircissement, mais il me faudrait un peu plus de précision, car j'ai bien essayé des choses, et la seule probante est :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Function test()
Set doc = ActiveDocument
MsgBox "InlineShape = " & doc.InlineShapes.Count & _
    vbCr & "Shapes = " & doc.Shapes.Count
Dim i As Integer
For i = 1 To doc.InlineShapes.Count
    With doc.InlineShapes(i)
        .Select
        ' .Name propriété non géré par l'objet ??
        'Debug.Print .Name
        Debug.Print .Type
    End With
Next i
Sauf que si ".Select" fonctionne bien, les propriétés de l'objet ne sont toujours pas accessibles : PAS de .Name (non géré pour l'objet) et le .Type donne systématiquement la valeur "5" quelque soit l'objet ??
Donc comment récupéré le NOM de l'objet et son TYPE (commandbutton par exemple) ? Merci de ton aide précisieuse
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 10h33   #16
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bonjour,

Vraiment personne pour me dire comment extraire le nom (propriété ".Name") et le Type (propriété ".Type") des objets InLineShapes ?

Merci d'avance.
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 18h59   #17
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1

Bon n'ayant eu aucun retour, j'ai continué à chercher pour finalement enfin trouver la bonne syntaxe, qui est la suivante, si cela peut aider d'autres personnes :
Code :
1
2
3
4
5
6
7
8
' Recherche des objets
Dim NbObj
For NbObj = 1 To doc.InlineShapes.Count
	With doc.InlineShapes(NbObj)
		Debug.Print .OLEFormat.Object.Name
		Debug.Print .OLEFormat.ClassType
	End With
Next NbObj
Bonne continuation à tous
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 00h29   #18
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut Chr22,

Bravo . N'oublie pas de cliquer sur :Resolu: pour que les autres DVPnautes puissent encore mieux profiter de ta solution.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 01h21   #19
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bsr, ok pour mettre RÉSOLU mais avec mon navigateur portable, je ne voie pas comment le faire ?
Désolé de vous embêter avec ça !
Ah si je l'ai finalement trouvé en bas de la page...

Juste pour conclure que du coup mon souhait de départ de copier/coller une zone de texte contenant un bouton de commande et lui attribuer son code, tout ça en VB fonctionne parfaitement !
MERCI à tous pour vos conseils.
Chr22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h17.


 
 
 
 
Partenaires

Hébergement Web