PARAMETRES SETTINGS VBA

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 17 nov. 2011 à 11:42
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 13 janv. 2012 à 15:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53764-parametres-settings-vba

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
13 janv. 2012 à 15:29
Salut,

comme suggeré plus haut, voici un exemple de l'utilisation des "CustomDocumentProperties"

Posté ici :
http://www.vbfrance.com/codes/UTILISER-PROPRIETES-PERSO-DOCUMENT-COMME-PARAMETRES-SETTINGS_53980.aspx

Pour rassurer l'ami MIMIZanZan, l'exemple inclus une méthode de protection des propriétés par combinaison de touche, qui associée à un mot de passe sur le code devrait freiner les ardeurs d'un utilisateur lambda.

A+
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
28 nov. 2011 à 15:39
Heureux que mes explications te satisfassent, LE PIVERT.
Je voudrais ajouter qu'en ce qui concerne la sauvegarde des settings ou des données, je conseille pour ma part la solution fichier externe à Excel. En effet, dans le cas où l'on envoie un programme à un utilisateur distant susceptible de modifier ces paramètres ou ces données, on peut envoyer des mises à jour du programme Excel sans se soucier des changements effectués par l'utilisateur, à condition bien sûr de prévoir dans le code à l'ouverture du programme la récup des données du fichier binaire.
Je précise que l'on peut sauver plusieurs tableaux dans le même fichier binaire. Il faut bien sûr les ouvrir dans le même ordre pour la récup des données. A ce sujet, à titre d'exemple, je me permets de te conseiller de consulter un des programmes que j'ai déposé sur VBFrance le 19/03/2009 "FACTURATION ET GESTION DE VENTES ARTICLES" (procédures SauveDonnées et RécupDonnées dans le module Général).
Autres avantages, c'est la légèreté du fichier binaire et la rapidité de transfert des données, ce qui évite un programme Excel trop lourd car on peut effacer les données des feuilles à la fermeture.

Toujours à ta dispo si nécessaire

Cdt
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
28 nov. 2011 à 08:19
Un grand merci MIMIZANZAN. Cela m'est très utile et très simple d'utilisation. Tes explications sont claires et nettes.
Au plaisir de te lire
@+ Le Pivert
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
28 nov. 2011 à 00:09
Salut LE PIVERT,

Pour ma 1ère proposition (création d'un fichier binaire), il faut dans mon exemple spécifier Option Base 1 en tête du module comme je l'ai mentionné en commentaire, sinon en VBA les tableaux démarrent par défaut à l'indice 0, et il faudrait alors écrire:
MsgBox A(0) & "," & A(1) & "," & A(2)
pour retrouver les 3 éléments créés dans le tableau.
Par contre, dans la 2ème proposition (création de nom), Excel attribue par défaut un tableau de base 1 quelque soit la déclaration Option Base, ce qui fait que tu as bien eu les 3 éléments du tableau.
Pour ton info les noms avec leur contenu apparaissent au niveau du menu feuille Excel avec Insertion/Nom/Définir, au même titre que les noms que l'on peut attribuer directement à une plage de cellule. Pour les maniaques du masquage, on peut cacher un nom pour qu'il n'apparaisse pas dans la boite de dialogue en écrivant simplement:
Names(votre nom).Visible=False
par ex: Names("MonTableau").Visible=False

J'espère que celà te sera utile.

Cdt
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
27 nov. 2011 à 17:17
Merci MIMIZANZAN pour ces infos. J'ai essayé ta 2ème solution qui fonctionne très bien sous Excel. Je me demande où sont stockés les données!!!!!
Pour ceux que cela intéresse voici le code pour ce programme:

Private Sub ecriture()
Dim A As Variant
If CheckBox1.Value = True Then
etatcheck = "Vrai" 'cocher
Else
CheckBox1.Value = False
etatcheck = "Faux" 'pascocher
End If
If OptionButton1.Value = True Then
etatoption = "Vrai" 'cocher
Else
OptionButton1.Value = False
etatoption = "Faux" 'pascocher
End If
index = ComboBox1.ListIndex
texte = TextBox1
If ToggleButton1.Value = True Then
ToggleButton1.Caption = "Fermer"
etattoggle = "Ouvert"
Else
ToggleButton1.Value = False
ToggleButton1.Caption = "Ouvert"
etattoggle = "Fermer"
End If
A = Array(etatcheck, etatoption, index, texte, etattoggle)
Names.Add Name:="MonTableau", RefersTo:=A
End Sub
Private Sub lecture()
Dim monTab As Variant
monTab = [MonTableau]
etatcheck = monTab(1)
etatoption = monTab(2)
index = monTab(3)
texte = monTab(4)
etattoggle = monTab(5)
End Sub

Par contre pour ta 1ère solution, je n'ai pas réussi à la mettre en application: il n'y a que 2 noms qui s'affichent. Le fichier est bien créé.
@+ Le Pivert
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
26 nov. 2011 à 18:40
Salut LE PIVERT,

Je signale à toute fin utile que l'on peut sauver dans un fichier type binaire une série de données sous forme de tableau, ce qui allège beaucoup l'écriture du code. Par ex:

Sub EcritFichArray()
Dim A As Variant
A = Array(10, 20, "salut")
Open "FichArray" For Binary Access Write As #1
Put #1, , A
Close #1
End Sub

Sub LitFichArray()
Dim A As Variant
Open "FichArray" For Binary Access Read As #1
Get #1, , A
Close #1
MsgBox A(1) & "," & A(2) & "," & A(3) 'si Option Base 1
End Sub

On peut aussi bien sûr traiter ainsi un tableau de dimension>1

Un autre moyen de sauver des données sous Excel est d'utiliser un nom, ce qui s'applique aussi aux tableaux.
Par ex:

Sub SauvTab()
Dim A As Variant
A = Array(10, 20, "salut")
Names.Add Name:="MonTableau", RefersTo:=A
End Sub

Sub RécupTab()
Dim monTab As Variant
monTab = [MonTableau]
MsgBox MsgBox monTab(1) & "," & monTab(2) & "," & monTab(3)
End Sub

Cdt
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 nov. 2011 à 17:45
En réponse à BIGFISH_LE_VRAI, pour ceux que cela intéresse. Voici un site qui traite les "CustomDocumentProperties" sous Word:

http://heureuxoli.developpez.com/office/word/variables/#L3

mais je ne pense pas que cela comprenne les contrôles contenus dans un UserForm.
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
17 nov. 2011 à 13:55
Bonjour BIGFISH_LE_VRAI,

Je connaissais la manière de mettre les données dans une des feuilles Excel. Mais pour Word, je ne connaissais pas la collection "CustomDocumentProperties". Je vais me pencher sur cette nouvelle voie.
Merci à toi de nous avoir éclairé
@+ Le Pivert
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 nov. 2011 à 13:15
Salut,

j'ajouterai que l'avantage d'excel est que l'on peut avec la même méthode utiliser une feuille excel en lieu et place d'un fichier extérieur.

Quand à word il est possible d'utilisé la collection "CustomDocumentProperties" qui permet de conserver des paramètres.

En tout cas ta source à le mérite de montrer comment faire et l'avantage de facilement permettre la personnalisation par chaque utilisateur.

A+
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
17 nov. 2011 à 12:02
Bonjour MPI,
C'est tout à fait juste. J'aurais pu l'enregistrer dans la base de registre, mais certaine personnes n'aiment pas avoir des données supplémentaires dans le registre (il faut supprimer si pas utilité par la suite). Cette solution a ces limites: il ne faut pas avoir trop de contrôles à mémoriser. Et dans le cas des OpionButtons, si ils sont nombreux on imagine la longueur du code!!!
@+ Le Pivert
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 nov. 2011 à 11:42
Salut,

En VBA, c'est plutôt comme sous VB6 et versions antérieures, on peut utiliser SaveSetting et GetSetting pour écrire/lire dans la base de registre.

Par contre, l'utilisation d'un fichier peut tout de même faire l'affaire sans surcharger ladite base de registre...
Rejoignez-nous