[Résolu][VBS] supprimer le dictionnaire pour un classeur

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 !
Bernard Mouille
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 01 déc. 2021 20:23

[Résolu][VBS] supprimer le dictionnaire pour un classeur

Message par Bernard Mouille »

Bonjour,
J'aimerais connaître comment supprimer le dictionnaire pour un classeur à l'aide d'une macro.
Merci d'avance.
Bernard.
Libre Office 7.2.3.2 (x64 ) - Windows 8
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] supprimer le dictionnaire pour un classeur

Message par Dude »

Salut,

Les dictionnaires sont fournis sous forme d'extension et accessibles depuis tous les modules.
On ne peut donc les supprimer au niveau d'un classeur.
Que cherches-tu à faire exactement ?
Bernard Mouille
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 01 déc. 2021 20:23

Re: [Calc] supprimer le dictionnaire pour un classeur

Message par Bernard Mouille »

Bonjour,

Je cherche à ce que les mots avec faute d'orthographe dans les cellules ne soient pas soulignés en rouge uniquement dans le classeur en cours.
Libre Office 7.2.3.2 (x64 ) - Windows 8
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] supprimer le dictionnaire pour un classeur

Message par Dude »

Dans ce cas, tu enregistres un modèle OTS dont les styles de cellule seront sans définition de langue.
capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bernard Mouille
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 01 déc. 2021 20:23

Re: [Calc] supprimer le dictionnaire pour un classeur

Message par Bernard Mouille »

Bonsoir,

En Microsoft Word, une macro permet de l'effectuer :

Code : Tout sélectionner

    ActiveDocument.ShowGrammaticalErrors = True
    ActiveDocument.ShowSpellingErrors = True
Ce que je cherche c'est l'équivalent en Calc s'il existe.

Cordialement,
Bernard
Libre Office 7.2.3.2 (x64 ) - Windows 8
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] supprimer le dictionnaire pour un classeur

Message par Dude »

Donc ce n'est pas supprimer un dictionnaire mais désactiver le correcteur orthographique.
Sous Writer ou Calc :

Code : Tout sélectionner

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")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SpellOnline"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:SpellOnline", "", 0, args1())
Bernard Mouille
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 01 déc. 2021 20:23

Re: [Calc] supprimer le dictionnaire pour un classeur

Message par Bernard Mouille »

Bonjour dude,

Merci de ton code, il fonctionne pour désactiver le dictionnaire. :bravo:
Toutefois, la désactivation n'est pas prise en compte à l'enregistrement du fichier.

Ci dessous le code en VBscript Windows en commande OLE sous Windows.

Bien à toi,
Bernard.

Code : Tout sélectionner


' Spelling.vbs
' Désactiver le dictionnaire pour le classeur.
'
' Utilisation : Copier ce code dans un fichier.vbs,
'               l'exécuter sous Windows.
'
' Ce code désactive effectivement le dictionnaire pour le classeur mais ne le supprime pas :
' une fois enregistré et réouvert, le dictionnaire est toujours actif.
'

Option Explicit

' Paramètres.
Const ColorTitle = 16776960              ' Couleur des titres jaune ( yellow ).
Const OdsFile    = "_Result.ods"         ' Fichier Libre Office de sortie.

Main()

Sub Main()
   Dim args1( 0 )              ' Tableau d'1 ligne pour les paramètres de oDesktop.LoadComponentFromURL()
   Dim aSpellOnline1( 0 )      ' Tableau d'1 ligne pour les paramètres du dictionnaire.
   Dim c                       ' Colonne de la cellule à traiter : me permet d'ajouter, supprimer et d'effacer des colonnes simplement.
   Dim i                       ' Numérique de comptage.
   Dim l                       ' Ligne de la cellule à traiter : me permet d'ajouter, supprimer et d'effacer des lignes simplement.
   Dim oDesktop                ' Objet créé par oServiceManager.CreateInstance()
   Dim oDoc                    ' Objet du classeur créé par oDesktop.LoadComponentFromURL()
   Dim oServiceManager         ' Objet Libre Office créé par CreateObject( "com.sun.star.ServiceManager" )
   Dim oSheet                  ' Objet de la feuille

   bv_FileDelete( OdsFile )    ' Effacer le fichier de sortie.

   ' Ouverture du classeur Libre Office et paramétrage de l'affichage.
   Set oServiceManager = CreateObject( "com.sun.star.ServiceManager" )
   Set args1( 0 )      = oServiceManager.Bridge_GetStruct( "com.sun.star.beans.PropertyValue" )
   args1( 0 ).name     = "Hidden"
   args1( 0 ).value    = False    ' True = n'affiche pas le classeur, False = affiche le classeur.
   Set oDesktop        = oServiceManager.CreateInstance( "com.sun.star.frame.Desktop" )
   Set oDoc            = oDesktop.LoadComponentFromURL( "private:factory/scalc", "_blank", 0, args1 )
   Set oSheet          = oDoc.GetSheets.GetByIndex( 0 )
   ca_CellsGridAll( oSheet )

   l = 0 : c = -1

   ' Ecriture des titres.
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetString( "N°" )
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetString( "Object" )
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetString( "IsHidden" )
   oSheet.getCellRangeByPosition(  0, l, c, l ).CellBackColor = ColorTitle

   l = l + 1 : c = -1
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetValue( i )
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetString( "Frame 1" )
   c = c + 1 : ca_WriteBool oSheet, c, l, True

   l = l + 1 : c = -1
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetValue( i )
   c = c + 1 : oSheet.GetCellByPosition( c, l ).SetString( "Frame 2" )
   c = c + 1 : ca_WriteBool oSheet, c, l, False

   ca_AutoFit( oSheet )

   msgbox "Le dictionnaire est activé.", 0, "Info"

   ' Désactivation du dictionnaire pour le classeur.
   Set aSpellOnline1( 0 ) = oServiceManager.Bridge_GetStruct( "com.sun.star.beans.PropertyValue" )
   aSpellOnline1( 0 ).name  = "SpellOnline"
   aSpellOnline1( 0 ).value = False
   oDoc.setPropertyValue "SpellOnline", aSpellOnline1

   msgbox "Le dictionnaire est désactivé." & chr( 10 ) _
        & "Le fichier va s'enregistrer, se fermer et s'ouvrir." & chr( 10 ) _
        & "Le dictionnaire sera toujours actif.", 0, "Info"

   oDoc.storeAsURL bv_FileToUrl( OdsFile ), Array()
   WSCript.sleep( 300 )
   oDoc.Close( True )
   WSCript.sleep( 500 )
   Set oServiceManager = Nothing
   CreateObject( "WScript.Shell" ).Run "explorer.exe " & bv_FileToFullName( OdsFile ), 1, False
End Sub

' Règle les dimensions des cellules utilisées.
Sub ca_AutoFit( oSheet )
   Dim oCursor
   Set oCursor = oSheet.createCursor()
   oCursor.gotoEndOfUsedArea( True )
   oSheet.getCellRangeByPosition( 0, 0, oCursor.getRangeAddress.EndColumn, oCursor.getRangeAddress.EndRow ) _
   .Columns.OptimalWidth = True
   Set oCursor = Nothing
End Sub

' Encadre toutes les cellules de la feuille.
Sub ca_CellsGridAll( oSheet )
   Dim oRange
   Set oRange = oSheet.getCellRangeByPosition( 0, 0, 1023, 1048575 ) 'Max col - 1 et max row - 1
   oRange.setPropertyValue "TopBorder"   , Array( 0, 0, 2, 0 )
   oRange.setPropertyValue "BottomBorder", Array( 0, 0, 2, 0 )
   oRange.setPropertyValue "LeftBorder"  , Array( 0, 0, 2, 0 )
   oRange.setPropertyValue "RightBorder" , Array( 0, 0, 2, 0 )
   Set oRange = Nothing
End Sub

' Ecrit une valeur logique dans une cellule.
Function ca_WriteBool( oSheet, c, l, lValue )
   Dim fValue
   fValue = "=FALSE()"
   If lValue Then fValue = "=TRUE()"
   oSheet.GetCellByPosition( c, l ).SetFormula( fValue )
End Function

' Effacer un fichier.
Sub bv_FileDelete( cFile )
   On Error Resume Next ' Au cas où il n'y a pas de fichier ou fichier protégé.
      CreateObject( "Scripting.FileSystemObject" ).DeleteFile( bv_FileToFullName( cFile ) )
   On Error goto 0
End Sub

' Convertit un nom de fichier en nom avec tout son chemin.
Function bv_FileToFullName( cFile )
   Dim cFullName
   cFullName = cFile
   If InStr( cFullName, "\" ) = 0 Then
      cFullName = Left( WScript.ScriptFullName, InStrRev( WScript.ScriptFullName, "\" ) ) & cFullName
   ElseIf Left( cFullName, 1 ) = "\" Then
      cFullName = Left( WScript.ScriptFullName, 2 ) & cFullName
   End If
   bv_FileToFullName = cFullName
End Function

' Convertit un nom de fichier Windows en URL.
Function bv_FileToUrl( cFile )
   Dim cUrl
   cUrl = cFile
   If InStr( cUrl, "/" ) = 0 Then
      If InStr( cUrl, "\" ) = 0 Then
         cUrl = Left( WScript.ScriptFullName, InStrRev( WScript.ScriptFullName, "\" ) ) & cUrl
      ElseIf Left( cUrl, 1 ) = "\" Then
         cUrl = Left( WScript.ScriptFullName, 2 ) & cUrl
      End If
      cUrl = Replace( cUrl, "\", "/" )
      cUrl = Replace( cUrl, ":", "|" )
      cUrl = Replace( cUrl, " ", "%20" )
      cUrl = "file:///" & cUrl
   End If
   bv_FileToUrl = cUrl
End Function

Libre Office 7.2.3.2 (x64 ) - Windows 8
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] supprimer le dictionnaire pour un classeur

Message par Dude »

Bernard Mouille a écrit :Toutefois, la désactivation n'est pas prise en compte à l'enregistrement du fichier.
Relis les éléments de réponse que je t'ai fait avant.
Ce paramétrage est général à tous les modules puisque OpenOffice ou ses dérivés est une suite intégrée.
Bernard Mouille a écrit :Ci dessous le code en VBscript Windows en commande OLE sous Windows.
Dans ce cas, la balise n'est pas [Calc] mais [VBS].
Bernard Mouille
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 01 déc. 2021 20:23

Re: [VBS] supprimer le dictionnaire pour un classeur

Message par Bernard Mouille »

Merci.
Libre Office 7.2.3.2 (x64 ) - Windows 8