La modération vous a écrit: "Bonjour ?" La politesse n'est pas une option.
Je me permet ces précisions quant à l'utilisation des zones de groupe dans les formulaires (dans LibreOffice 7.3.5 en tout cas) car j'ai lu des choses inexactes qui m'ont fait galérer !
Une zone de groupe contient plusieurs boutons radio (boutons d'option) dont un seul pourra être sélectionné par l'utilisateur.
L'assistant de création de ces zones de groupe donne le même nom à chaque bouton qu'elle contient ainsi qu'un autre nom à la zone de groupe elle-même. La documentation dit que le fait que le nom soit le même permet à l'application de savoir qu'ils font partis de la même zone de groupe…
A l'écriture d'une macro, nous voulons savoir quelle bouton l'utilisateur a sélectionné pour déclencher une action ou une autre.
Plusieurs méthodes sont possibles :
1 - A chaque bouton, on associe une procédure Sub différente ;
2 - Malgré ce que dit la documentation, on peut, semble-t-il, renommer chaque bouton différemment et ainsi identifier dans le code chacun des boutons, pour LibreOffice tout du moins !
Dans les propriétés de chaque bouton (pour sélectionner un bouton et pas toute la zone de groupe, tenir la touche Ctrl appuyée en cliquant sur le bouton voulu), on trouve la propriété « Nom du groupe » qu'il faut compléter avec le nom de la zone de groupe et qui va permettre de rattacher le bouton à cette zone de groupe. Ainsi, il conserve la fonctionnalité où un seul bouton peut être sélectionné dans le groupe.
L'utilisation du navigateur de formulaire (menu Outils) est fortement conseillé pour visualiser les noms des différents éléments.
Ensuite pour connaître l'état de chaque bouton (sélectionné ou non), il suffit d'identifier le bouton et d'utiliser la propriété .State du bouton pour orienter la procédure.
Exemple :
Code : Tout sélectionner
oBouton1 = oForm.getByName("Bouton1")
If oBouton1.State = 1 then 'le bouton est activé
etc
3 - On laisse les noms des boutons identiques. A ce moment-là, on utilise un artifice pour les repérer : pour chaque bouton, on peut utiliser la propriété « Complément d'information » pour donner un qualificatif différent à chaque bouton (ou son étiquette). Dans le code, on pourra alors faire appel à cette propriété par le mot-clé .Tag (.label pour l'étiquette). Dans les exemples de code trouvés sur Internet ou dans le livre de référence sur la programmation de B. Marcelly et L. Godard, une procédure est proposée pour passer en revue les différents boutons et identifier celui qui est sélectionné :
Extrait du code :
Code : Tout sélectionner
unFormulaire = lesFormulaires.getByName("FM1")
unFormulaire.getGroupByName("avisDuClient", opinion())
for each alternative in opinion()
With alternative
MsgBox("Label= " & .Label & chr(13) & _
"Tag= " & .Tag & chr(13) & "Etat= " & .State)
End With
next
Or, ceci se révèle faux (avec L.O. 7.3.5) : c'est bien le nom du groupe (pas son étiquette) et non le nom des boutons qui doit être utilisé !
Comme :
Code : Tout sélectionner
unFormulaire.getGroupByName("nomduGroupe", opinion())
On peut ensuite déclencher des actions suivant la valeur de ces propriétés.
Je joins une base exemple avec 2 zones de groupe identiques mais qui utilisent les méthodes 2 et 3. En sélectionnant un bouton ou un autre, on active ou désactive d'autres contrôles. Ici, les boutons sont « indépendants » : ils ne sont pas liés eux-mêmes à un champ de table.