[Résolu][Calc] Format Date pour insertion cellule

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 !

[Résolu][Calc] Format Date pour insertion cellule

Messagepar PaulMarie » 14 Nov 2019 16:43

Bonjour
Je débute et après quelques recherches j'ai testé deux macros qui fonctionnent et font la même chose alors que la seconde est bien plus coute.
Quel est la bonne solution

Code : Tout sélectionner   AgrandirRéduire
Sub insertDate
'insere la date en position cellule selectionnée
   Dim aLocale as new com.sun.star.lang.Locale, vNumFormat
   Dim oDoc as Object : oDoc = ThisComponent
   Dim oCell as Object : oCell = oDoc.CurrentSelection 'celulle selectionnée
   Dim sFormat as String : sFormat = "JJ/MM/AA"
   If oCell.supportsService( "com.sun.star.sheet.SheetCell" ) Then
      oCell.setValue( Now() )
      vNumFormat = oDoc.getNumberFormats().queryKey( sFormat, aLocale, TRUE )
      If ( vNumFormat = -1 ) Then
         vNumFormat = oDoc.getNumberFormats().addNew( sFormat, aLocale )
      End If
      oCell.NumberFormat = vNumFormat
      msgbox vNumFormat '=>30
   End If
End Sub


Code : Tout sélectionner   AgrandirRéduire
sub insertdate2
Dim oDoc as Object : oDoc = ThisComponent
Dim oCell as Object : oCell = oDoc.CurrentSelection 'cellule selectionnée
ocell.value=Now()
ocell.NumberFormat=37 'jj/mm/aaaa 30 ou 36 jj/mm/aa 37
end sub


La modération a écrit:Merci d'utiliser les balises [code] pour mettre en forme vos macros et les rendre ainsi plus lisibles.
Dernière édition par PaulMarie le 15 Nov 2019 16:36, édité 3 fois.
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
PaulMarie
Fraîchement OOthentifié
 
Message(s) : 4
Inscrit le : 14 Nov 2019 16:24

Re: Format date pour cellule

Messagepar Bidouille » 14 Nov 2019 16:48

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

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
Bidouille
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 10216
Inscrit le : 08 Nov 2005 17:23
Localisation : Brest, France

Re: [Calc] Format date pour cellule

Messagepar Dude » 14 Nov 2019 17:04

Salut,

Primo, il est de coutume de citer l'origine des macros que l'on pompe.
Pour la 1ere : http://forum.openoffice.org/fr/forum/ftopic1132.html

Celle-ci a l'avantage d'insérer la date au format local déclaré par l'utilisateur.
Car tout le monde n'utilise pas le jj/mm/aaaa
D'autres pays utilisent le format mm-jj-aa ou aaaa-mm-jj ou encore la forme aaaa-mmm-jj
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21122
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Format date pour cellule

Messagepar luky-luke » 14 Nov 2019 17:52

Bonjour
Pour compléter la réponse de Dude
La macro la plus longue est préférable. Dans l'ordre
Code : Tout sélectionner   AgrandirRéduire
sFormat = "JJ/MM/AA"
Définir un format de date comme l'indique Dude

Code : Tout sélectionner   AgrandirRéduire
If oCell.supportsService( "com.sun.star.sheet.SheetCell" ) Then
Vérifie qu'il n'y a qu'une seule cellule de sélectionnée

Code : Tout sélectionner   AgrandirRéduire
vNumFormat = oDoc.getNumberFormats().queryKey( sFormat, aLocale, TRUE )
      If ( vNumFormat = -1 ) Then
Vérifie si le format existe déjà


Code : Tout sélectionner   AgrandirRéduire
vNumFormat = oDoc.getNumberFormats().addNew( sFormat, aLocale )
      End If
Et si il n'existe pas l'ajoute dans les formats définie par l'utilisateur

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
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Messagepar PaulMarie » 15 Nov 2019 10:09

Merci pour cette analyse du "bon" code
mais une critique de l'autre solution me serait utile(sans reprendre les contrôles qui sont absents dans cette solution)
en particulier les valeurs numériques de
Code : Tout sélectionner   AgrandirRéduire
NumberFormat
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
PaulMarie
Fraîchement OOthentifié
 
Message(s) : 4
Inscrit le : 14 Nov 2019 16:24

Re: [Calc] Format date pour cellule

Messagepar luky-luke » 15 Nov 2019 13:19

Bonjour
PaulMarie a écrit:en particulier les valeurs numériques de NumberFormat

Pour connaître la valeur numérique d'un format, sélectionner une cellule, lui appliquer un format de date et on lance une macro comme celle-ci par exemple
Code : Tout sélectionner   AgrandirRéduire
Sub Format_Cellule
Dim oDoc as Object : oDoc = ThisComponent
Dim oCell as Object
oCell = oDoc.CurrentSelection 'cellule selectionnée
Print oCell.NumberFormat
End Sub
ou on se sert du débogueur :fou: (ou plus puissant Xray, mais c'est une autre histoire)
NumberFormat.png

Dans la fenêtre des macros :
1 placer le curseur sur print et cliquer sur le point rouge dans la barre d'outils, c'est un point d'arrêt pour stopper l'exécution de la macro sur cette ligne.
2 placer le curseur sur oCell et cliquer sur les lunettes, pour connaître les propriétés (méthodes) de l'objet sélectionner (oCell)
3 Lancer la macro
4 chercher dans la fenêtre en bas à gauche la propriété qui nous intéresse.
La valeur numérique d'un format peut varier d'un système à l'autre, d'où le commentaire dans la macro.
Code : Tout sélectionner   AgrandirRéduire
ocell.NumberFormat=37 'jj/mm/aaaa 30 ou 36 jj/mm/aa 37
C'est pourquoi le macro la plus longue dans ton premier message est préférable.

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
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Messagepar PaulMarie » 15 Nov 2019 15:14

Pour
Code : Tout sélectionner   AgrandirRéduire
NomberFormat
, j'avais constaté que la valeur 'était pas fiable lors de l'écriture mais la lecture (-1) peut elle être utilisée pour le contrôle d'existence d'un format ?
Et pour le contrôle de l'unicité de la cellule sélectionnée, le code ci-dessous est-il acceptable (programmation plus traditionnelle que l'utilisation de
Code : Tout sélectionner   AgrandirRéduire
If oCell.supportsService( "com.sun.star.sheet.SheetCell" )
qui reste incompréhensible pour mo,i
Mais quoi qu'il en soit, il me reste à apprendre à utiliser le débogueur et à comprendre les subtilités de
Code : Tout sélectionner   AgrandirRéduire
supportsService...

Le code pour contrôler si une ou plusieurs cellules sélectionnées
Code : Tout sélectionner   AgrandirRéduire
sub ControleSelection
' controle si la sélection est une cellule unique
Dim oDoc as Object : oDoc = ThisComponent
Dim oCell as Object : oCell = oDoc.CurrentSelection 'la ou les cellules selectionnées
Dim rep, table() as string
' controle d'unicité
rep=ocell.absoluteName
table=Split(rep,"$")
if ubound(table())=3 then
  msgbox "Cellule unique"
else
  msgbox "zone de cellules"
end if

end sub
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
PaulMarie
Fraîchement OOthentifié
 
Message(s) : 4
Inscrit le : 14 Nov 2019 16:24

Re: [Calc] Format date pour cellule

Messagepar Dude » 15 Nov 2019 15:37

PaulMarie a écrit:Le code pour contrôler si une ou plusieurs cellules sélectionnées

Ton code est inutile.
Relis ce que t'écrit luky-luke :
luky-luke a écrit:
Code : Tout sélectionner   AgrandirRéduire
If oCell.supportsService( "com.sun.star.sheet.SheetCell" ) Then
Vérifie qu'il n'y a qu'une seule cellule de sélectionnée

Donc...
Code : Tout sélectionner   AgrandirRéduire
if oCell.supportsService( "com.sun.star.sheet.SheetCell" ) Then
  msgbox "Cellule unique"
else
  msgbox "zone de cellules"
endIf

Tout simplement
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21122
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Format date pour cellule

Messagepar luky-luke » 15 Nov 2019 15:42

Re
PaulMarie a écrit:la lecture (-1) peut elle être utilisée pour le contrôle d'existence d'un format ?
oui comme je te l'indique dans ma réponse au dessus.
Bon là on va déborder de la question, on va se faire rattraper par la patrouille :wink:
Pour contrôler la sélection faite par l'utilisateur, on utilise la fonction supportsService pour savoir si le service "com.sun.star.sheet.SheetCell" est supporté par .CurrentSelection si oui alors il n'y a qu'une seul cellule de sélectionnée et on change le format de la cellule, si non ben... on fait autre chose.
Les différents service à notre disposition pour connaître la/les sélections fait par l'utilisateur.
Code : Tout sélectionner   AgrandirRéduire
Sub Selection_Cellule
oSel = ThisComponent.CurrentSelection

If oSel.supportsService( "com.sun.star.table.CellRange" ) Then
   MsgBox ("Une zone de cellule sélectionnée")
End if

If oSel.supportsService("com.sun.star.sheet.SheetCell") Then
   MsgBox ("Une seule cellule sélectionnée")
End if

If oSel.supportsService("com.sun.star.table.Cell") Then
   MsgBox ("Une seule cellule sélectionnée")
End if

If oSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
   MsgBox ("Plusieurs zones de cellules sélectionnées")
End if
End Sub

Je pense que tu peux passer le fil en [Résolu] Image dans le premier message de ton fil :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
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Messagepar PaulMarie » 15 Nov 2019 16:14

Merci a tous
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
PaulMarie
Fraîchement OOthentifié
 
Message(s) : 4
Inscrit le : 14 Nov 2019 16:24

Re: [Calc] Format date pour cellule

Messagepar micmac » 15 Nov 2019 16:15

Les formats ouverts (ODF) assurent la pérennité de vos documents.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 6325
Inscrit le : 28 Août 2010 09:45


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : LibreOfficiant et 10 invité(s)