Alternative à SaveSetting et GetSetting

Cédric06400

XLDnaute Nouveau
Bonjour à tous,

En préambule, je vous demande de l'indulgence, je suis novice en VBA, j'ai débuté mon apprentissage il y a quelques semaines.
J'ai mis à profit ce temps "perdu" (le confinement) pour créer un fichier Excel avec quelques UF qui doit me servir à prendre des RDV quand mes clients me contactent.
Mon "programme" fonctionne à merveille mais ...

J'ai mal compris la fonction SaveSetting, en effet je l'utilise pour mémoriser les choix, valeurs des objets de mes UF.

Ce que je n'ai pas compris ou mal compris c'est que le SaveSetting est propre à Excel et non au nom du fichier.
Si je résume les paramètres sauvegardés sont les derniers sauvegardés meme si je change de nom du fichier.

Ce que j'aimerai c'est que chaque RDV soit enregistré sous un nom disting et que je puisse retrouver mes paramètres lors d'une ouvertures ultérieure.

Le code que j’utilise en simplifiant est

Option Explicit
'Optionbuttons
Dim etatoptionOP1 As String
'Paramettre"
Dim Etattest As String
'
'
'
Private Sub Userform_QueryClose(Cancel As Integer, CloseMode As Integer)
'SaveUF1
UnHookMouse
Unload Me
End Sub
'
'
'
Private Sub UserForm_initialize()
Ouverture
If etatoptionOP1 = "Vrai" Then
OptionButton1.Value = True
End If
End Sub
'
'
'
Private Sub 'SaveUF1()

If OptionButton1.Value = True Then
SaveSetting appname:="MyApp", section:="UF1OptionButton1", _
Key:="etatoptionOP1", setting:="Vrai"
SaveSetting "MyApp", "UF1OptionButton1", "etatoptionOP1", "Vrai"
Else
SaveSetting appname:="MyApp", section:="UF1OptionButton1", _
Key:="etatoptionOP1", setting:="Faux"
SaveSetting "MyApp", "UF1OptionButton1", "etatoptionOP1", "Faux"
End If
End Sub
'
'
'
Private Sub Ouverture()
'OP1
etatoptionOP1 = GetSetting(appname:="MyApp", section:="UF1OptionButton1", _
Key:="etatoptionOP1")
End Sub
'
'
'
Private Sub OptionButton1_Click()
'Choix d'onneur d'ordre agence'
If Controls("OptionButton1").Value = True Then
RAZDonneurdordreliste
[Formulaire!B1] = "Agence"
End If
End Sub


Mes questions sont les suivantes :
Peut-il y avoir un SaveSetting pour chaque fichier ?
Si non puis-je me servir du "section " pour y mettre des Key de plusieurs dossiers ?
Pouvez vous m'aider ;)

Merciiii d'avance
Cédric
 

patricktoulon

XLDnaute Barbatruc
bonjour
au cas ou tu l'ignorerais savesetting et getsetting enregistre dans la base de registre windows
est tu d'accords avec ca ??? ;)

"je suis novice en VBA " ,UnHookMouse
et ben mon amis pour un novice tu va vite en besogne je trouve
s'attaquer au registre et au hooking tu es du genre "même pas peur toi"

la réponse à ta question est "oui" autant que tu veux
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Je plussoie d'autant ce que vient d'exprimer eriiiic, que je salue) qu'une interface (ce qu'est un userform normalement utilisé) n'est pas un conteneur de valeurs, mais un outil offrant au mieux à l'utilisateur le moyen de saisir des valeurs destinées à une base de données (souvent une feuille de calcul, sous Excel)
Il me parait personnellement assez vraisemblable que tu devrais plutôt reconsidérer la conception même de ton outil.
 

eriiic

XLDnaute Barbatruc
Et tu n'as pas besoin de tester sa valeur pour enregistrer soit vrai, soit faux.
Que tu sauvegardes 2 fois d'ailleurs, tu dois être un angoissé toi non ? ;-)
Enregistre directement OptionButton1.Value
eric
 

Cédric06400

XLDnaute Nouveau
Hello, merci à tous pour vos réponses rapides.

Alors oui cela me derange d’enregistrer dans la base de registre.
En toute sincérité je m’attendais à vos réponses. Mais j’avais l’espoir que mes longues heures de codes n’ai pas servi à rien.
Donc le sujet de ce poste est particulièrement à propos. Alternative à .
J’ai bien compris que je vais avoir besoin de tout réécrire. Et c’est la que j’ai besoin d’aide. J’ai compris que je vais devoir stocker mes valeurs dans une feuille du fichier.
Ce que je ne sais pas encore faire ou ce que j’ai pas encore bien compris est la création des événements lors de initialidation de l’uf.
en effet chaque valeur implique une action.
Par exemple si la valeur de mon OptionButton1 est Vrai (stocké sur ma feuille) à l’initiation cela devrait déclencher l’apparition d’une frame ou d’un label.Je ne sais pas comment aller chercher l’info sur la feuille et l’exploiter
Si je pouvais avoir un début de code j’arriverai peut-être a comprendre le fonctionnement et à l’appliquer au très nombreuses commande de mon fichier (12 uf avec de nombreux objets).
Je pourrais vous transmettre mon fichiers ce soir si vous préférez.
Patrick mon HookMouse fonctionne, j’ai adapté un code que j’ai trouvé.
Merci encore
 

Cédric06400

XLDnaute Nouveau
Re,
Me voici de retour.
Voici 2 fichiers :
AAA Prise de ... est mon fichier que j'ai vidé des codes saveSetting ....
et
Test simple qui serait le début de quelque-chose qui pourrait m'apprendre à me débrouiller seul pour modifier mon ficher.
J'aimerai qu'à l'ouverture la valeur enregistrée au préalable renvoie l'action souhaitée.
J'appliquerai ensuite aux autres objets (TextBox, CheckBox, ToggleButton, ComboBox) de mon fichier.

Par avance merci
Cédric
 

Pièces jointes

  • Test simple.xlsm
    28.3 KB · Affichages: 5
  • AAA Prise RDVmai 4.0.xlsm
    487.5 KB · Affichages: 6

eriiic

XLDnaute Barbatruc
:)

J'ai ouvert test, il y aurait beaucoup trop à en dire, du coup je n'ai pas regardé l'autre ;)
Je préfère tout reprendre à ma manière.
Déjà optionButton n'est pas le meilleur (ou du moins le plus simple) exemple à prendre.
En effet, ils sont groupés et un seul peut être vrai. Inutile de tous les sauvegarder, seul le n° du True t'intéresse.
Je pars donc du principe qu'un groupe d'optionbutton a un nom qu'un met à tous les optionbuttons de ce groupe, auquel on ajoute un n°
Ce qui donne groupe: OptBtn_Gr1_ 1er bouton: OptBtn_Gr1_1
Comme ça tu retrouves tes petits facilement.

Je trouve inutile d'enregistrer à chaque changement.
Pour moi un enregistrement à la fermeture du formulaire et une restitution à l'Activate suffit.
Bon, tu feras comme tu le sens mais mon exemple est basé sur ce principe.
Pour te faciliter les tests je t'ai ajouté un bouton qui fait l'enregistrement comme à la fermeture

Je t'ai ajouté un textbox pour un exemple plus simple.
Pour un liste ou un combox c'est l'item sélectionné ou le .Text qui t'intéressera
J'espère n'avoir rien oublié, au moins tu as un principe...
eric

PS : F1 est ton amie ;)
 

Pièces jointes

  • Test simple.xlsm
    27.3 KB · Affichages: 8

Cédric06400

XLDnaute Nouveau
est pour moi du chinois et donc à traduire. j'ignore totalement ce que pourrait être une action "renvoyée" par une valeur.
Hello
Si OptionButton1 est coché A1=1
Si OptionButton2 est coché A1=2
Par exemple
Mais j'ai l'ambition d'y ajouter des affichage de frames ou de Boutons de commandes par exemple

voici 1 exemple dans mon fichier

Private Sub OptionButton1_Click()
'Choix d'onneur d'ordre agence'
If Controls("OptionButton1").Value = True Then
RAZDonneurdordreliste
[Formulaire!B1] = "Agence"
'on modifie la propriété Caption du bouton pour les prochains clics
Label1.Caption = "Agence"
Label10.Visible = False
TextBox8.Visible = False
OptionButton6.Visible = False
OptionButton7.Visible = False
OptionButton8.Visible = False
OptionButton9.Visible = False
OptionButton10.Visible = False
OptionButton11.Visible = False
Frame3.Visible = True
CommandButton1.Visible = True
End If
End Sub

Voilou
 

Cédric06400

XLDnaute Nouveau
:)

J'ai ouvert test, il y aurait beaucoup trop à en dire, du coup je n'ai pas regardé l'autre ;)
Je préfère tout reprendre à ma manière.
Déjà optionButton n'est pas le meilleur (ou du moins le plus simple) exemple à prendre.
En effet, ils sont groupés et un seul peut être vrai. Inutile de tous les sauvegarder, seul le n° du True t'intéresse.
Je pars donc du principe qu'un groupe d'optionbutton a un nom qu'un met à tous les optionbuttons de ce groupe, auquel on ajoute un n°
Ce qui donne groupe: OptBtn_Gr1_ 1er bouton: OptBtn_Gr1_1
Comme ça tu retrouves tes petits facilement.

Je trouve inutile d'enregistrer à chaque changement.
Pour moi un enregistrement à la fermeture du formulaire et une restitution à l'Activate suffit.
Bon, tu feras comme tu le sens mais mon exemple est basé sur ce principe.
Pour te faciliter les tests je t'ai ajouté un bouton qui fait l'enregistrement comme à la fermeture

Je t'ai ajouté un textbox pour un exemple plus simple.
Pour un liste ou un combox c'est l'item sélectionné ou le .Text qui t'intéressera
J'espère n'avoir rien oublié, au moins tu as un principe...
eric

PS : F1 est ton amie ;)
Merci je vais étudier ton fichier.
J'ai compris que option button n'était pas le bon exemple
Merci pour le principe.
Au travail
 

Cédric06400

XLDnaute Nouveau
:)

J'ai ouvert test, il y aurait beaucoup trop à en dire, du coup je n'ai pas regardé l'autre ;)
Je préfère tout reprendre à ma manière.
Déjà optionButton n'est pas le meilleur (ou du moins le plus simple) exemple à prendre.
En effet, ils sont groupés et un seul peut être vrai. Inutile de tous les sauvegarder, seul le n° du True t'intéresse.
Je pars donc du principe qu'un groupe d'optionbutton a un nom qu'un met à tous les optionbuttons de ce groupe, auquel on ajoute un n°
Ce qui donne groupe: OptBtn_Gr1_ 1er bouton: OptBtn_Gr1_1
Comme ça tu retrouves tes petits facilement.

Je trouve inutile d'enregistrer à chaque changement.
Pour moi un enregistrement à la fermeture du formulaire et une restitution à l'Activate suffit.
Bon, tu feras comme tu le sens mais mon exemple est basé sur ce principe.
Pour te faciliter les tests je t'ai ajouté un bouton qui fait l'enregistrement comme à la fermeture

Je t'ai ajouté un textbox pour un exemple plus simple.
Pour un liste ou un combox c'est l'item sélectionné ou le .Text qui t'intéressera
J'espère n'avoir rien oublié, au moins tu as un principe...
eric

PS : F1 est ton amie ;)

Hello
Bon voila j'ai passé un temps (beaucoup) à essayer de comprendre le principe.
Globalement j'ai compris mais étant donné que je suis une b..e en code, je suis capable de copier et de transposer mais incapable d'imaginer une solution (du moins qui fonctionne) sur une nouveauté.

J'ai 2 problèmes
Le 1er quand j'ajoute des Optionbutton et que j'active autre chose que le numéro 1 tous les autres s'activent à l'initialisation.

Le second est avec les CheckBox et les ToggleButton impossible de charger correctement les valeurs. J'ai bien essayé des choses mais rien de concluant. A un moment j'y été arrivé, cela fonctionné sauf quand je ne passé pas par le bouton test. Va savoir pourquoi.

Aurait tu encore un peu de temps à me consacrer j'y suis presque.

Autre détail, qui viendra ensuite.
Vu que j'ai plusieurs UF dois-je faire un savForm par UF, avec mes valeurs dans un CurrentRegion.Value différent ou un seul savForm ?

Voici mon fichier

Merci

Cédric
 

Pièces jointes

  • Test simple (4).xlsm
    31 KB · Affichages: 6

eriiic

XLDnaute Barbatruc
Bonjour,

Le 1er quand j'ajoute des Optionbutton et que j'active autre chose que le numéro 1 tous les autres s'activent à l'initialisation.
non, ils ne s'activent pas à l'initialisation. Tu as mis les optionbuttons 2 à 5 à True par défaut dans les propriétés (fenêtre F4).
Donc mettre le 5 à True comme sauvegardé ne génère pas l'événement change puisqu'il est déjà dans cet état.
il faut les mettre tous à False par défaut. A la limite un seul à True tel que leur fonctionnement le prévoit si tu veux en définir un par défaut.

Le second est avec les CheckBox et les ToggleButton impossible de charger correctement les valeurs. J'ai bien essayé des choses mais rien de concluant. A un moment j'y été arrivé, cela fonctionné sauf quand je ne passé pas par le bouton test. Va savoir pourquoi.
VB:
            Case "CheckBox"
                .Controls(datas(lig, 2)).Value = True
comment veux-tu qu'il ait une autre valeur que True ?
Il faut lui mettre la valeur sauvegardée :
Code:
.Controls(datas(lig, 2)).Text = datas(lig, 3)

Vu que j'ai plusieurs UF dois-je faire un savForm par UF, avec mes valeurs dans un CurrentRegion.Value différent ou un seul savForm ?
Ca pourra être une procédure commune appelée par chaque UF.Activate.
Mais pour ça il faut modifier pas mal de chose que chacun ait sa place définie sur la feuille.
Je verrai un peu plus tard.
eric

Edit : Bonjour youki
C'est vrai que je cherchais à utiliser les propriétés par défaut des contrôles.
Ce n'est peut-être pas absolument nécessaire pour simplifier.
Rappeler le type et le nom comme je le fais peut être éventuellement intéressant selon l'usage, à voir avec le demandeur. Vu qu'il débute ça peut l'éclaircir...
 
Dernière édition:

Cédric06400

XLDnaute Nouveau
Bonjour,


non, ils ne s'activent pas à l'initialisation. Tu as mis les optionbuttons 2 à 5 à True par défaut dans les propriétés (fenêtre F4).
Donc mettre le 5 à True comme sauvegardé ne génère pas l'événement change puisqu'il est déjà dans cet état.
il faut les mettre tous à False par défaut. A la limite un seul à True tel que leur fonctionnement le prévoit si tu veux en définir un par défaut.


VB:
            Case "CheckBox"
                .Controls(datas(lig, 2)).Value = True
comment veux-tu qu'il ait une autre valeur que True ?
Il faut lui mettre la valeur sauvegardée :
Code:
.Controls(datas(lig, 2)).Text = datas(lig, 3)


Ca pourra être une procédure commune appelée par chaque UF.Activate.
Mais pour ça il faut modifier pas mal de chose que chacun ait sa place définie sur la feuille.
Je verrai un peu plus tard.
eric

Edit : Bonjour youki
C'est vrai que je cherchais à utiliser les propriétés par défaut des contrôles.
Ce n'est peut-être pas absolument nécessaire pour simplifier.
Rappeler le type et le nom comme je le fais peut être éventuellement intéressant selon l'usage, à voir avec le demandeur. Vu qu'il débute ça peut l'éclaircir...
Merci à tous les 2 je vais me replonger dedans.
 

Discussions similaires

H
Réponses
19
Affichages
6 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin