nimel a écrit :

Agnès Simonet a écrit :
nimel a écrit :

Bonjour,
Ben non décidément je dois pas être douée, rien à faire je n'arrive pas à progresser avec l'API, malgrès Xray et les différentes doc. Dès que je crois comprendre et que je tente une solution ça ne marche pas. Les exemples que j'ai eu je ne les comprend pas, il y a des histoires d'haricots (beans) que je ne trouve expliquées nulle part !

Mon but ultime :
Dans une feuille Calc, il y a une case à cocher par ligne. Chaque ligne contient de multiples données réparties sur plusieurs colonnes. Quand l'utilisateur coche la case, il faut que la cellule adjacente se remplisse avec "oui" et que le texte de la ligne concernée devienne rouge. Je suis d'accord que je pourrais le faire rien qu'avec le contrôle de la cac et du formatage conditionnel. Mais le soucis c'est qu'il y a plus de 200 lignes à faire et à priori on ne peux pas faire des copier/coller "relatifs" avec des éléments de formulaire ! J'ai donc pensé qu'il était plus judicieux se baser sur la position du focus au moment où on coche la case.


Bonjour Agnès et merci de ta réponse.

J'aime bien les petits problèmes comme ça, donc je poursuis mes recherches.

Les 200 cases à cocher j'envisage de les créer tout simplement par des copier/coller en mode création de formulaire, mais justement, le but de la macro s'est d'éviter de les reprendre une à une pour les renommer et changer la cellule liée.

Tu peut les renommer par macro :
' Renommer les controles
        'recupérer les controles
        formEnum = leFormulaire.createEnumeration
        indicenom = 1
        while formEnum.HasMoreElements
                leCtrl=formEnum.NextElement
                print "nom d'origine : " &leCtrl.Name
                'changer leur nom
                indicenom = indicenom  +1
                nomCtrl = "case"&LTrim( Str(indicenom) )
                leCtrl.Name= nomCtrl
                print "nouveau nom : " & leCtrl.Name
        wend

Si la première case à cocher est à la ligne 5 par exemple, il pourrait être astucieux d'initialiser indicenom à 4 comme ça le nom reflètera le numéro de ligne.


Mais je commence à avoir un doute sur la faisabilité de la chose. En effet il ne faut pas tester si la case est cochée ou pas, mais trouver les coordonnées de la case qui a le focus, vu qu'elles auront toutes le même nom.

Maintenant qu'on a des noms différents, on peut trouver la ligne comme ça :

' Chercher le n° de ligne du controle "case3" de la page de dessin
for i = 0 to maPageDessin.count-1
        if maPageDessin.getbyIndex(i).control.name = "case3" then
                print "ligne :" & 
maPageDessin.getbyIndex(i).anchor.cellAddress.Row
                exit for
        end if
next i

En fait il ne reste plus qu'à savoir trouver quel est la case à cocher qui a déclenché la macro. Je cherche.

Agnès S.

---------------------------------------------------------------------
To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org
For additional commands, e-mail: prog-h...@fr.openoffice.org

Répondre à