[Résolu] [Calc] Remise à zéro listes déroulantes en cascade

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 !
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

[Résolu] [Calc] Remise à zéro listes déroulantes en cascade

Message par clownhouse »

Bonjour à tous,

Je viens vers vous car malgré mes recherches dans le forum et un sujet dans partie tableur (https://forum.openoffice.org/fr/forum/v ... =4&t=47441), je ne parvient pas à trouver une solution adaptée à mon problème. Peut-être une macro pourrai me permettre d'avancer.

Je vous explique, j'ai créé un fichier avec des listes déroulantes qui découlent les unes des autres (Département puis arrondissement, puis commune) avec "INDIRECT" et en relation avec les données stockées sur d'autres feuilles du fichier.
Cela fonctionne très bien seulement lorsque je viens modifier une des premières listes déroulantes, les valeurs des autres restent par défaut.

Ce que je souhaiterai, c'est que si je reviens sur une liste déroulante précédente, c'est que la ou les suivante(s) revienne(nt) à 0 et ceci pour chaque ligne de mon tableau. :?

Je vous joins un fichier exemple afin de simplifier les recherches et comprendre ma démarche.

J'ai récupérer un code sous excel mais ne sait pas comment l'adapter sous calc et comment l'appliquée à ttes les lignes de mon tableau.

Code : Tout sélectionner

[color=#4040FF]Private Sub Worksheet_Change(ByVal Target As Range)
Dim ZoneAEffacer As Range

Set ZoneAEffacer = Range("B2:C2")
If Target.Address = "$A$2" Then ZoneAEffacer.ClearContents
Set ZoneAEffacer = Range("C2")
If Target.Address = "$B$2" Then ZoneAEffacer.ClearContents
End Sub[/color]
Je vous remercie par avance de vos recherches intellectuelles.

Bonne journée à tous. :D
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par clownhouse le 08 mai 2015 09:47, modifié 3 fois.
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par Dude »

Salut,

Tu as fait des recherches dans la partie Tableur, il te suffit de faire la même chose ici.
Et d'un problème complexe, il faut décomposer ce dernier en tâches élémentaires.
Chaque tâche a forcément un bout de code qui lui correspond.

Par exemple avec
clownhouse a écrit :récupérer un code sous excel mais ne sait pas comment l'adapter sous calc
Worksheet_change est un événement de feuille qui est géré différemment :

Image

Il suffit de brancher ton code sur "Contenu modifié".

:idea:
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par clownhouse »

Merci Dude,

J'ai effectuer mes recherches sur l'ensemble du forum et sur le net, mais sans trouver ma solution.

J'ai tester le code sous excel et cela fonctionne pour une ligne.

Par contre, lors de sa transposition sous calc, il me met une "erreur 91"
Erreur 91.jpg
Ne faisant pas de programmation, je n'arrive pas à découvrir d'où provient cette erreur.

De plus, même sous excel, je ne sais pas comment répercuter ce code sur les autres lignes.

Merci de votre aide. Je continue toujours à chercher.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par Dude »

clownhouse a écrit :J'ai effectuer mes recherches sur l'ensemble du forum et sur le net, mais sans trouver ma solution.
Solution ? Tu ne trouveras que très rarement un cas semblable au tien sauf s'il est courant.
Donc, bis repetitae :
Dude a écrit :d'un problème complexe, il faut décomposer ce dernier en tâches élémentaires
clownhouse a écrit :J'ai tester le code sous excel et cela fonctionne pour une ligne.
Tu viens de poser la question qui tue

Les listes en cascade font l'objet d'un suprême de code.
Pars plutôt de cet exemple pour l'adapter à ton cas.
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par luky-luke »

Bonjour

Un exemple à tester.

Code : Tout sélectionner

Option Explicit
Sub Main
Dim oSheet As Object, oSelectCell As Object
Dim oRa As Object
oSheet = ThisComponent.Sheets.GetByName("DPT")
oSelectCell = ThisComponent.currentselection
oRa = oSelectCell.CellAddress
If oRa.Column = 0 Then
	oSheet.GetCellByPosition(1,oRa.Row).String = ""
	oSheet.GetCellByPosition(2,oRa.Row).String = ""
End if	
End Sub
Dude a écrit :Il suffit de brancher ton code sur "Contenu modifié".
C'est ce qui est fait dans le fichier joint.
clownhouse.ods
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par clownhouse »

MERCI luky-luke

Tu es un génie, ta macro fonctionne comme souhaité. Le résultat obtenu correspond à mes recherches. :bravo:

Il me manque juste un dernier point, c'est que cela fonctionne quand on change la première liste déroulante, elle remet à 0 les 2 autres, :super:

par contre lorsque je ne change que la 2ème liste, je voudrais que la 1ère reste identique mais que la 3ème revienne à 0. :tesfou:

J'espère avoir été assez clair dans mes explications.

Bonne journée à tous les membres du forum et à ceux qui passe du temps pour aider les moins débrouillard comme moi..... :lol: surtout pour de la macro.... :oops:
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par luky-luke »

ReBonjour
clownhouse a écrit :lorsque je ne change que la 2ème liste, je voudrais que la 1ère reste identique mais que la 3ème revienne à 0.
Il suffit d'ajouter une condition à la macro

Code : Tout sélectionner

If oRa.Column = 1 Then
	oSheet.GetCellByPosition(2,oRa.Row).String = ""
End if	
Et dans le fichier joint.
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par clownhouse »

MERCI luky-luke :super:

TU ES FORMIDABLE, rapide et génial. :bravo:

C'est exactement ce que je cherchais à faire, cela fonctionne impeccablement.

Un seul détail, dont je me suis aperçu par hasard, c'est que lorsque j'ai entré des données, que je sélectionne mes 3 liste déroulantes et que je fais supprimer, le logiciel me mets le message d'erreur ci-dessous:
Erreur.jpg
:fou:

Cela ne la fait pas quand je supprime cellule par cellule ......;

MERCI
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par luky-luke »

Rere
Encore une petite condition :wink:

Code : Tout sélectionner

If oSelectCell.supportsService("com.sun.star.table.Cell") Then
Contrôle si l'on a bien sélectionné qu'une seule cellule.
La macro complète

Code : Tout sélectionner

Option Explicit
Sub Main
Dim oSheet As Object, oSelectCell As Object
Dim oRa As Object
oSheet = ThisComponent.Sheets.GetByName("DPT")
oSelectCell = ThisComponent.currentselection
oRa = oSelectCell.CellAddress
	If oSelectCell.supportsService("com.sun.star.table.Cell") Then
		If oRa.Column = 0 Then
			oSheet.GetCellByPosition(1,oRa.Row).String = ""
			oSheet.GetCellByPosition(2,oRa.Row).String = ""
		End if
		If oRa.Column = 1 Then
			oSheet.GetCellByPosition(2,oRa.Row).String = ""
		End if
	End if
End Sub
Je manque de pratique en ce moment :lol:

Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par clownhouse »

Re

En fait, cela ne change pas le pb, j'ai tjs le code erreur. Ce code intervient dès que je sélectionne au moins 2 cellules et que j'appuie sur la touche supprimer..... :aie:

Et ce quelque soit les cellules sélectionnées (dans ou or tableau)....
luky-luke a écrit :Je manque de pratique en ce moment :lol:
Que j'aimerais manquer de pratique comme toi..... :wink:
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par luky-luke »

Rerere :roll:
clownhouse a écrit :Ce code intervient dès que je sélectionne au moins 2 cellules et que j'appuie sur la touche supprimer
Je ne reproduis pas l'erreur que tu signale. Test le fichier joint.
clownhouse_2.ods
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
clownhouse
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 janv. 2011 20:51

Re: [Calc] Remise à zéro de listes déroulantes en cascade

Message par clownhouse »

Bonjour,

MERCI LUKY-LUKE,

En effet, le fichier que tu as transmis ne présente aucune erreur et celui sur lequel j'ai travaillé ne le faisait plus après avoir entièrement relancé LibreOffice. Tu est FORMIDABLE :super:

Grâce à toi, cela fonctionne parfaitement :bravo: alors que je n'y serais pas arrivé seul, car même avec la macro sous les yeux, j'ai du mal à tout comprendre. :fou: Heureusement qu'il existe des personnes comme toi et d'autres du forum pour aider les pauvres âmes en perdition comme moi. :aie:
Merci à tous ceux qui prennent du temps pour aider les autres à progresser et longue vie à ce forum.... :P

Bonne journée à tous.
Clownhouse
Libre Office Version: 3.5.7.2, Windows 7 Professionnel SP1