[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 !
PaulMarie
Fraîchement OOthentifié
Messages : 4
Inscription : 14 nov. 2019 15:24

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

Message par PaulMarie »

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

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

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 vous a écrit: Merci d'utiliser les balises [code] pour mettre en forme vos macros et les rendre ainsi plus lisibles.

Dernière modification par PaulMarie le 15 nov. 2019 15:36, modifié 3 fois.
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12228
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: Format date pour cellule

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

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 : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Format date pour cellule

Message par Dude »

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
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Message par luky-luke »

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

sFormat = "JJ/MM/AA"
Définir un format de date comme l'indique Dude

Code : Tout sélectionner

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

vNumFormat = oDoc.getNumberFormats().queryKey( sFormat, aLocale, TRUE )
      If ( vNumFormat = -1 ) Then
Vérifie si le format existe déjà

Code : Tout sélectionner

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
PaulMarie
Fraîchement OOthentifié
Messages : 4
Inscription : 14 nov. 2019 15:24

Re: [Calc] Format date pour cellule

Message par PaulMarie »

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

NumberFormat
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Message par luky-luke »

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

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

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
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
PaulMarie
Fraîchement OOthentifié
Messages : 4
Inscription : 14 nov. 2019 15:24

Re: [Calc] Format date pour cellule

Message par PaulMarie »

Pour

Code : Tout sélectionner

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

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

supportsService...
Le code pour contrôler si une ou plusieurs cellules sélectionnées

Code : Tout sélectionner

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
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Format date pour cellule

Message par Dude »

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

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

if oCell.supportsService( "com.sun.star.sheet.SheetCell" ) Then
  msgbox "Cellule unique"
else
  msgbox "zone de cellules"
endIf
Tout simplement
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Format date pour cellule

Message par luky-luke »

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

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
PaulMarie
Fraîchement OOthentifié
Messages : 4
Inscription : 14 nov. 2019 15:24

Re: [Calc] Format date pour cellule

Message par PaulMarie »

Merci a tous
LibreOffice Version: 6.3.3.2 (x64)
Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9253
Inscription : 28 août 2010 08:45

Re: [Calc] Format date pour cellule

Message par micmac »

Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac