[Résolu][Calc] Liste de validité renvoie erreur 509

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 !
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

[Résolu][Calc] Liste de validité renvoie erreur 509

Message par agraeth »

Bonjour,

Je souhaite générer une liste et m'en servir de source pour une lise de validité en cellule C1.
La liste est générer automatiquement en récupérant la valeur des cellules C1 [44] si non vide, sachant que si une des cellules testées (C1, C45, C89…) est vide, alors les suivantes le seront.

En recherchant sur les fora j'ai pu faire ce code (je ne donne que la partie qui pose problème, le code complet étant bien trop imposant…) :

Code : Tout sélectionner

Dim Annee As String, strVal As String
Dim Fl As Object, ShCl As Object, cVal As Object

Set Fl = ShCl.getByName("Rapport")
strVal = Left(Annee, Len(Annee) – 3)
For i = 0 To maxMois - minMois +1 'De 0 à 3 dans l'exemple
    If i > 0 Then
        strVal = strVal & ";" & Fl.getCellRangeByName("C" & 44 * (i + 1) – 43).String
    End If
Next i
MsgBox(strVal) 'Renvoi 2014;2014 - Mars;2014 - Février;2014 - Janvier
cVal = Fl.getCellRangeByName("C1").getPropertyValue("Validation")
With cVal
	.IgnoreBlankCells = False
	.setPropertyValue("ErrorAlertStyle" , com.sun.star.sheet.ValidationAlertStyle.STOP)
	.setPropertyValue("Type", com.sun.star.sheet.ValidationType.LIST)
	.setPropertyValue("Operator", com.sun.star.sheet.ConditionOperator.EQUAL)
	.setPropertyValue("ShowErrorMessage", true)
	.setPropertyValue("ErrorTitle", "Erreur de saisie")
	.setPropertyValue("ErrorMessage", "Saisir uniquement une valeur de la liste")
	.setPropertyValue("ShowList", com.sun.star.sheet.TableValidationVisibility.SORTEDASCENDING)
	.setFormula1(strVal) 'Testé avec "" & strVal & "" sans plus de résultat
	.setPropertyValue("formula2","0")
End With
Fl.getCellRangeByName("C1").setPropertyValue("Validation",cVal)
Le problème : la cellule C1 donne une liste qui ne contient que "Err :509"…
J'ai testé également en remplaçant :

Code : Tout sélectionner

strVal = strVal & ";" & Fl.getCellRangeByName("C" & 44 * (i + 1) – 43).String
par

Code : Tout sélectionner

strVal = strVal & Chr(13) & Fl.getCellRangeByName("C" & 44 * (i + 1) – 43).String
avec pour résultat de n'avoir dans la liste que la première valeur à savoir "2014"…

Je vous remercie de votre aide !
Dernière modification par agraeth le 16 avr. 2014 07:32, modifié 3 fois.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12231
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Liste de validité

Message par Bidouille »

Bonjour,

En plus du code, fournissez avec un fichier complet.
Cela augmentera vos chances de réponse en évitant d'avoir à recréer quelque chose qui au final, pourrait ne pas convenir.
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Calc] Liste de validité renvoie erreur 509

Message par agraeth »

Bonjour,

Oui, j'avais lu qu'il aurait été mieux de fournir un fichier, mais je ne peux pas fournir le fichier complet (fichier pro contenant des données confidentielles).
Je vais essayer de fournir un fichier de substitution avec uniquement les valeurs nécessaires…

J'éditerai ce post quand il sera prêt !

Merci pour la modification du titre :idea:
--------------------------------------------------------
Edit :
Comme promis, la pièce jointe, mais bien allégée !
Sur les conseils d'un autre forum, j'ai remplacé ";" par Chr(10), mais avec le même effet que Chr(13)
J'ai également sorti le calcul de la fonction getCellRangeByName sans plus de résultat…
Sans nom 1.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par agraeth le 15 avr. 2014 20:56, modifié 1 fois.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Liste de validité renvoie erreur 509

Message par Grenouille »

Bonsoir,

L'erreur 509 signifie qu'un opérateur est manquant dans une formule.
A priori sans rapport avec une macro.
Commence par faire ta liste de validité de manière classique pour voir d'où vient l'erreur.

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Calc] Liste de validité renvoie erreur 509

Message par agraeth »

Bonsoir Grenouille, et merci de t'intéresser à mon cas !

En voulant voir comment était réellement créée ma liste de validité, je me suis rendu compte que la macro créait une validité de type Plage de cellule alors que je souhaite un type Liste… :marto:
Mais aucune idée du pourquoi du comment et de tout ce qui va avec...
Dernière modification par agraeth le 16 avr. 2014 06:48, modifié 1 fois.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Liste de validité renvoie erreur 509

Message par Piaf »

Bonsoir
A tester

Code : Tout sélectionner

Sub liste
dim cl as object, shcl as object, fl as object, cVal as object
dim nb as integer
dim i as byte
dim strVal As String

cl = thiscomponent
shcl = cl.sheets 
Fl = ShCl.getByName("Rapport")
strVal = """2014""" & ";"'Left(Annee, Len(Annee) – 3) en réalité
For i = 0 To 3 'De 0 à maxMois - minMois +1 en réalité
    If i > 0 Then
    	nb = 44*(i+1)-43
       ' strVal = strVal & Chr(10) & Fl.getCellRangeByName("C" & nb).String
       strVal = strVal & """" & Fl.getCellRangeByName("C" & nb).String & """" & ";"
    End If
Next i

cVal = Fl.getCellRangeByName("C1").getPropertyValue("Validation")
With cVal
    .IgnoreBlankCells = False
    .setPropertyValue("ErrorAlertStyle" , com.sun.star.sheet.ValidationAlertStyle.STOP)
    .setPropertyValue("Type", com.sun.star.sheet.ValidationType.LIST)
    .setPropertyValue("Operator", com.sun.star.sheet.ConditionOperator.EQUAL)
    .setPropertyValue("ShowErrorMessage", true)
    .setPropertyValue("ErrorTitle", "Erreur de saisie")
    .setPropertyValue("ErrorMessage", "Saisir uniquement une valeur de la liste")
    .setPropertyValue("ShowList", com.sun.star.sheet.TableValidationVisibility.SORTEDASCENDING)
    .setFormula1(strVal) 'Testé avec "" & strVal & "" sans plus de résultat
    .setPropertyValue("formula2","0")
End With
Fl.getCellRangeByName("C1").setPropertyValue("Validation",cVal)

End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

Re: [Calc] Liste de validité renvoie erreur 509

Message par agraeth »

Bonjour Piaf, et merci !

Ta solution fonctionne très bien ! :bravo:

La première valeur ne sera par contre pas toujours "2014" puisque l'outil sera utilisé tous les ans d'où la remarque dans le code

Code : Tout sélectionner

'Left(Annee, Len(Annee) – 3) en réalité
Du coup en modifiant juste un peu ce que tu me proposes on y arrive :

Code : Tout sélectionner

Sub liste
dim cl as object, shcl as object, fl as object, cVal as object
dim nb as integer
dim i as byte
dim strVal As String

cl = thiscomponent
shcl = cl.sheets 
Fl = ShCl.getByName("Rapport")
strVal = """" & Left(Annee, Len(Annee) – 3) & """"
For i = 0 To 3 'De 0 à maxMois - minMois +1 en réalité
    If i > 0 Then
       nb = 44*(i+1)-43
       ' strVal = strVal & Chr(10) & Fl.getCellRangeByName("C" & nb).String
       strVal = strVal & "";"" & """" & Fl.getCellRangeByName("C" & nb).String & """"
    End If
Next i

cVal = Fl.getCellRangeByName("C1").getPropertyValue("Validation")
With cVal
    .IgnoreBlankCells = False
    .setPropertyValue("ErrorAlertStyle" , com.sun.star.sheet.ValidationAlertStyle.STOP)
    .setPropertyValue("Type", com.sun.star.sheet.ValidationType.LIST)
    .setPropertyValue("Operator", com.sun.star.sheet.ConditionOperator.EQUAL)
    .setPropertyValue("ShowErrorMessage", true)
    .setPropertyValue("ErrorTitle", "Erreur de saisie")
    .setPropertyValue("ErrorMessage", "Saisir uniquement une valeur de la liste")
    'Ligne suivante désactivée pour ne pas me retrouver dans mon cas avec une liste ou février est avant janvier et mars...
    '.setPropertyValue("ShowList", com.sun.star.sheet.TableValidationVisibility.SORTEDASCENDING)
    .setFormula1(strVal) 'Testé avec "" & strVal & "" sans plus de résultat
    .setPropertyValue("formula2","0")
End With
Fl.getCellRangeByName("C1").setPropertyValue("Validation",cVal)

End Sub
Problème résolu !
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro