[Calc] Effacement contenu cellues non adjacentes

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
sarmova
Fraîchement OOthentifié
Messages : 1
Inscription : 03 oct. 2018 14:32

[Calc] Effacement contenu cellues non adjacentes

Message par sarmova »

Bonjour,
Je suis débutante sur Libreoffice basic que je trouve plus ardu que le VBA d'excel en particulier sur l'utilisation du lexique pour pourvoir coder des choses simples comme on le ferait sur le tableur d'excel.

Voilà j'ai créé un tableau de la plage A4:H14 représentant une fiche d'apprentissage de verbes en Néerlandais. Je me fabrique une sorte de Becherel des verbes. Et en ce moment j'en ai plein le cerveau et je n'ai pas trop de temps pour me disperser.
J'ai procédé par le menu Outils/Macros/Enregistrer une macro... mais il s'avère qu'au moment d'exécuter la macro pour effacer le contenu des cellules non adjacentes : D4, F4 et la plage du contenu de C4:H14, et bien l'effacement est partiel.
Soit D4 (verbe en néerlandais) est bien effacé mais pas le reste. Ce qui est bizarre car j'ai déjà procédé à ce genre de technique pour une facture réalisée sur Calc avec des formules et cela marchait MAIS PAS ICI.
J'ai cherché à comprendre à m'aidant des réponses apportées au fil "Effacer des cellules déterminées sous calc" qui font apparaître plein de démonstrations de codes mais pour une néophyte comme moi ; franchement c'est du chinois; c'est pire que VBA où l'on trouve plus de solutions.
Donc j'ai bidouillé :wink: sur le code en pensant compléter la référence des plages de cellules. Voilà le code ci-dessous en copier-coller que j'ai ouvert à partir du menu outils/macros/éditer la macro.

Code : Tout sélectionner

REM  *****  BASIC  *****


sub Effacer_fiche
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C7:$H14" 
Commentaires : c'est ici que j'ai écrit les différentes plages
mais ca ne fonctionne pas; il doit y avoir un ordre au niveau des
arguments, des termes "args1"(0).Name ou Value. Qu'es-ce que Topoint?

Code : Tout sélectionner

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDN"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())

end sub
Merci d'avance si quelqu'un déjà peu m'aider à rectifier l'argumentation des dites cellules.
:arrow: Autre demande : y a-t-il un Manuel d'apprentissage ultra simple(je n'ai pas envie de devenir informaticien) du langage
Libreoffice basic ? J'ai cherché sur moteur de recherche et j'ai vu que des choses assez compliquées qui ne traite pas de l'apprentissage à la base. Je ne comprends pas la méthodologie des différents termes : rem, dim, dispatcher... Je comprend uniquement ce que je retrouve sur vba avec "sub" et "end sub" pour dire :marto:
Libreoffice 6.0.4.2 sous windows 8
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12219
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: Macros, lexiques et exos codage simple pour les débutant

Message par Bidouille »

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://forum.openoffice.org/fr/forum/su ... html#27295

N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25165
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Effacement contenu cellues non adjacentes

Message par Dude »

Salut,
sarmova a écrit :mais il s'avère qu'au moment d'exécuter la macro pour effacer le contenu des cellules non adjacentes : D4, F4 et la plage du contenu de C4:H14, et bien l'effacement est partiel
Mme Irma est encore absente du forum.
Joins donc ton classeur accompagné de ta macro que l'on voit de quoi il en retourne.
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Effacement contenu cellues non adjacentes

Message par Hubert Lambert »

Bonjour, et bienvenu sur le forum :wink: ,
sarmova a écrit :Je suis débutante sur Libreoffice basic que je trouve plus ardu que le VBA d'exce
Les macros dans LibreOffice sont conçues de manière toute différente : il existe une interface de programmation (la fameuse "api", ici appelée "api UNO"), assez complexe mais utilisable avec différents langages de programmation : basic (langage interne), python, javascript, vba, etc...
Le meilleur moyen de découvrir ou d'explorer l'api est d'installer un outil d'introspection, comme Xray ou MRI.
sarmova a écrit :Voilà j'ai créé un tableau de la plage A4:H14 [...] J'ai procédé par le menu Outils/Macros/Enregistrer une macro... mais il s'avère qu'au moment d'exécuter la macro pour effacer le contenu des cellules non adjacentes : D4, F4 et la plage du contenu de C4:H14, et bien l'effacement est partiel.
L'enregistreur de macro est un outil expérimental qui fonctionne de manière très particulière. Au lieu de recourir à l'api, il utilise des sortes de "macros internes", celles-la même qui sont exécutées lorsqu'on déclenche un menu ou un bouton de barre d'outils. Son usage est limité à des cas relativement simples, ou pour appeler une "macro interne" sans équivalent dans l'api (plutôt rare).
sarmova a écrit :franchement c'est du chinois; c'est pire que VBA où l'on trouve plus de solutions.
Comme je l'ai dit, l'esprit est très différent : il faut ici apprendre un langage de programmation et un api. En plus, il n'est pas possible de connaître d'avance les méthodes et propriétés d'un objet (pas d'autocomplétion), ce qui ralentit encore l'apprentissage... mais le rend aussi plus solide.

Un exemple très simple
Installe Xray et recopie le code ci-dessous dans l'éditeur de macro basic :

Code : Tout sélectionner

sub testXray
	doc = thiscomponent
	'xray doc
	xray doc.CurrentSelection
end sub
La 1re ligne permet de récupérer l'objet "document en cours" (thiscomponent)
La 2e, commentée, permet d'explorer les méthodes et propriétés de cet objet. Si tu décommentes, tu y trouveras notamment une propriété "CurrentSelection", bien pratique pour débuter.
La 3e explore cet objet, qui correspond donc à la sélection courante.

Sélectionne deux cellules non contiguës et lance la macro. En parcourant les méthodes, tu verras une méthode "clearContents", qui semble correspondre à ce que tu cherches. Pour savoir à quoi correspond le paramètre attendu "nContentFlags", il suffit de se reporter à la documentation. En cherchant sur le nom de la méthode, on tombe ici, et il suffit de suivre le lien vers CellFlags pour trouver les bonnes valeurs.
On obtient ainsi :

Code : Tout sélectionner

doc.CurrentSelection.clearContents(1+2+4+8+16)
sarmova a écrit :Autre demande : y a-t-il un Manuel d'apprentissage ultra simple(je n'ai pas envie de devenir informaticien) du langage Libreoffice basic ?
Tout est ici : https://forum.openoffice.org/fr/forum/v ... ?f=8&t=820.

Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)