whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention 2 mars 2009
-
2 déc. 2008 à 21:48
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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.
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 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 ?
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 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.
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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.
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 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.
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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...
piloulac
Messages postés21Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention28 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.
whitelegend
Messages postés156Date d'inscriptionvendredi 13 janvier 2006StatutMembreDerniè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.