Modification de macro par macro sous Outlook

whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009 - 2 déc. 2008 à 21:48
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009 - 19 déc. 2008 à 15:47
Bonjour tous le monde,

Bon je prends le risque de me faire taper sur les doigt par un admin en relançant mon sujet sans réponse dans un nouveau sujet ...( ne Sachant pas encore excatement comment fonctionne le forum pour les sujet non résolu....Pardonnez moi d'avance je ne le referai plus c'est promis )

Donc voilà mon problème, je voudrais modifier une ligne de code dans mon code mais en passant par une macro ( un command button dans mon userform excatement).
Ci-dessous un morceau de code qui m'interesse que j'ai trouvé sur le forum mais que je n'arrive pas à adapter à mon besoin.... Effectivement, comme je fait cette macro sous Outlook j'ai une erreur sur le "ActiveWorkbook"... rien d'anormal vous me direz....
En revanche je ne trouve absolument pas la ligne de commande équivalente du genre : "ThisOutlookSession.VBProject....."
(La référence "


Microsoft Visual Basic for Applications Extensibility"
  à bien été activée.

WithActiveWorkbook.VBProject.VBComponents("Nom du module").CodeModule
           ' pour le remplacement d'une ligne entière
           Fori = 1To.CountOfLines
                 Cible = .Lines(i, 1)
                 IfCible = "texte cherché" Then
                     .ReplaceLine i, "Nouveau texte"
                 EndIf
           Next
End With

Ci-dessous, mon code existant que je souhaite modifier (ligne en rouge gras précisément) :

Private Sub UserForm_Initialize()
    'Initialisation et chargement de la combobox
        Dim Item As Variant
            With ComboBox1
                .Text = "Autre"
                .Font.Italic = True
                .ForeColor = RGB(153, 153, 153)
            End With
    'Initialisation de la Textbox6
            With TextBox6
                .Text = "Ajouter une adresse mail ici"
                .Font.Italic = True
                .ForeColor = RGB(153, 153, 153)
            End With
    'Chargement des tableaux
            creationfournisseur
            creationrelation
            creationrelanceur
            For Each Item In fournisseur()
                ComboBox1.AddItem (Item)
            Next
    'Desactive la Combobox
            ComboBox1.Enabled = False
    'Colle le presse papier dans la Textbox "NCR"
            TextBox2.Paste
    'Insertion de l'imag
            imScreenShot.Picture = LoadPicture("c:\ScreenShot.jpg")
            imScreenShot.PictureSizeMode = fmPictureSizeModeStretch
            imScreenShot.Height = 144
            imScreenShot.Width = 216
    'Affiche ou non le ScreenShot ( False = afficher)
            clic = False' Initialisation de la variable "clic"<<< ICI
            If Not clic Then
                UserForm1.Width = 461.25
                clic = True
                btExtent.Caption = ">"
            Else
                UserForm1.Width = 232.5
                clic = False
                btExtent.Caption = "<"
            End If
End Sub

Voilà j'espère avoir des résultats car je bute sérieusement sur ce problème.

Merci à tous

LC

10 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 déc. 2008 à 14:05
Bonjour,

Pourquoi ne pas passer plutôt par une variable publique dans un module ?

http://nhen0039.chez-alice.fr/index.php
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
3 déc. 2008 à 14:10
NHenry,

C'est à dire? je ne comprends pas solution que tu me propose car dans tous les cas que je déclare une variable publique ou privée je serais obligé de définir une valeur par défaut au démarrage du programme et c'est justement cette valeur que je veux modifier.

Au final chaque utilisateur pour configurer son application comme il le veut au démarrage.

Maintenant il me manque encore beaucoup de ficelles en programmation et n'hésite pas à m'éclairer si je n'ai pas saisis la piste que tu me donnes

LC
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 déc. 2008 à 14:18
Bonjour,

Bien que je ne connaisse rien à l'automatisation de Outlook (j'utilise Thunderbird, et je connais seulement VBA Excel), je vais essayer de t'aider.
Où stock tu la valeur à utiliser ?

http://nhen0039.chez-alice.fr/index.php
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
3 déc. 2008 à 17:56
NHenry,

Tout est dans le premier message en fait.

Le code existant que je donne est donc stocké dans le code de mon userform, au milieu de toutes les sub d'événements associés aux différents objets de mon userform.

LC
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 déc. 2008 à 21:55
Bonjour,

Si tu reste sur ta pensée de changer ton code, je ne pourrais pas t'aider d'avantage, mais si tu stock la valeur dans un endroit qui résiste à l'arrêt de Outlook, tu pourra la réutiliser la valeur sans toucher à ton code.

Pas mieux à te dire pour le moment.

http://nhen0039.chez-alice.fr/index.php
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
4 déc. 2008 à 07:44
NHenry,

En fait j'avais pensé à cette solution oui de stocké mon booléen dans une variable public, mais le problème c'est qu'à chaque redémarrage du PC la valeur est perdue et donc la configuration choisie par l'utilisateur...
C'est dommage car comme vu dans le code ci-dessous ce que je veux faire est possible sous Excel VBA .... donc je pense qu'on doit pouvoir trouver l'équivalent sous Outlook VBA....

Surtout que la librairie utilisé sous Excel pour faire cette manip est aussi disponible sous VBA Outlook, mais en fait je n'arrive pas à accéder aux propriétés "VBProject" ou "VBComponents" qui sont tous les deux membres du groupe "VBIDE" selon l'explorateur d'objet VBA.

Donc voilà où j'en suis

LC
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
4 déc. 2008 à 09:24
Bonjour,

Avec Excel, j'utilise :
ThisWorkbook.CustomDocumentProperties("IsRestrict") = "1"
Pour stocker des données entre 2 arrêts, cela t'évitera de changer le code de ta macro.

http://nhen0039.chez-alice.fr/index.php
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
4 déc. 2008 à 16:47
Nhenry,

Merci mais je reste toujours face a mon problème ... comment modifier cette valeur depuis un bouton sur le userform ? ( donc en passant par du code vba)

Car même avec cette solution de stockage de valeur entre 2 arrêts comment un utilisateur novice qui ne connaitra pas le moins du monde la programmation pourra modifier cette valeur pour lui donner false ou true par défaut au démarrage de son appli.

Je rappelle que dans mon application si ma variable clic=True l'application démarre en plein écran par défaut et le contraire si false.

Voilà donc si tu as une idée ou même quelqu'un d'autre, toutes proposition sera la bienvenue.

Nhenry,

As tu vu cette source qui permet de faire exactement ce que je veux mais sous Excel ?

With ActiveWorkbook.VBProject.VBComponents("Nom du module").CodeModule
           ' pour le remplacement d'une ligne entière
           For i = 1To.CountOfLines
                 Cible = .Lines(i, 1)
                 If Cible = "texte cherché" Then
                     .ReplaceLine i, "Nouveau texte"
                 End If
           Next
End With

Mon soucis est que sur la ligne With, sous Outlook je n'arrive pas acceder à la propriété .VBProject...

LC
0
piloulac Messages postés 21 Date d'inscription dimanche 10 juin 2007 Statut Membre Dernière intervention 28 décembre 2008
17 déc. 2008 à 18:26
La méthode CodeModule me paraît pas tro adaptée à ton problème.
Même si tu réussissais à la faire fonctionner, elle n'aurait d'intérêt que si tu enregistres l'application car sinon au redémarrage, ton code initial serait inchangé.  Enfin, je crois.

Donc, je serai assez d'accord avec NHenry pour une astuce de stockage.
Du genre une valeur stockée dans un  Label visible=false  dans ton Form.

Ton code testerait cette valeur en cours de session pour charger ta variable Click.

Il faudra éviter de fermer l'UserForm par Unload et préférer Hide.
Mais cependant, il faudra enregistrer l'application avant de fermer.

A moins que tu ouvres parallèllement un petit fichier (caché) de données qui stocke les valeurs utiles. Dans ce cas, il te suffit de save ce petit fichier et laisser ton application intacte. (TonAppli.Close false)
Avant l'ouverture de l' UF, prévoir le test des valeurs de ce fichier référent.

Certes, c'est du bricolage... Ceci dit faute de mieux.
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
19 déc. 2008 à 15:47
piloulac,

Merci pour cette petite réaction qui viens de me donner un bonne solution ! certe du "bricolage" comme tu le dis mais au moins ca marchera.

Je vais créer un fichier .txt annexe dans lequel je stockerais les valeur susceptibles d'être modifier tout en conservant cette modification entre 2 démarrage du PC.

Je m'y mets et je posterais une solution :)

Merci

LC
0
Rejoignez-nous