Resalut tout le monde.
La modération vous a écrit:
Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Alors, je n'ai pas eu le temps de tester toutes les propositions, car j'ai eu des soucis avec la protection des cellules notamment
En effet, mon code ne fonctionnait pas et je ne comprenais pas d'où venait le problème...
Voici le code
Code : Tout sélectionner
Sub supressionespace
Dim oDoc as Object
Dim MaFeuille as Object
Dim maCellule as Object
Dim curseur as Object
'Dim i As Long
Dim maZone As Object
rem enlève la protection de la feuille-------------------------------------------------------------------
rem MaFeuille = ThisComponent.Sheets.getByName("")
oDoc = ThisComponent
MaFeuille = oDoc.getSheets.getByName("Communes")
MaFeuille.Unprotect ("motdepasse")
maZone = MaFeuille.getCellRangeByName("O4:O6000")
maZone.ArrayFormula = "=TRIM(C4:C1000)"
'fait la copie de B (supprespace) en C
dim PysFeuille as object
dim PysSource as object
dim PysDest as object
PysFeuille = thiscomponent.sheets.getByName("Communes")
PysSource = PysFeuille.getCellRangeByName("O4:O6000")
PysDest = PysFeuille.getCellRangeByName("D4:D6000")
PysDest.DataArray = PysSource.DataArray
' La fonction remplace les espaces par des tirets
Dim Remplace As Object
Dim Ancien(3) As String , Nouveau(3) As String
Dim i As Long
' La fonction remplace les espaces par des tirets
Ancien() = Array(" ")
Nouveau() = Array("-")
MaFeuille = thisComponent.sheets.getByName("Communes")
maZone = maFeuille.getCellRangeByName("D4:D6000")
Remplace = maZone.createReplaceDescriptor
For i = 0 To 0
Remplace.SearchString = Ancien(i)
Remplace.ReplaceString = Nouveau(i)
MaZone.replaceAll(Remplace)
Next i
' remplace l'ancien texte par le nouveau
Ancien() = Array("ST-" , "STE-" , "-CEDEX" , "-D-" , "ç" , "è" , "ê" , "â" , "à" , "ô" , "ï" , "î" , "ë" , "les-" , "La-" , "Le-" , "é")
Nouveau() = Array("SAINT-" , "SAINTE-" , "", "-D'" , "c" , "e" , "e" , "a" , "a" , "o" , "i" , "i", "e" , "(Les)" , "(La)" , "(Le)" , "e")
maFeuille = thisComponent.sheets.getByName("Communes")
maZone = maFeuille.getCellRangeByName("D4:D6000")
Remplace = maZone.createReplaceDescriptor
For i = 0 To 16
Remplace.SearchString = Ancien(i)
Remplace.ReplaceString = Nouveau(i)
maZone.replaceAll(Remplace)
Next i
'le fonction met des majsucules partout
rem ----------------------------------------------------------------------
rem define variables
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")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$D$4:$D$6000"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ChangeCaseToUpper", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$D$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
MaFeuille.protect ("motdepasse")
End Sub
En gros voici les étapes.
La macro déverrouille le classeur
La fonction "supprespace" recueille ce que j'ai copié en C en enlevant les espaces indésirables
Le code donné par vos soins étire la fonction "supprespace" sur la colonne O
Le code copie les données uniquement (pas la formule) en O et la colle en D sans utiliser le presse papier (oui faut pas oublier qu'au tout début l'utilisateur effectue un copier/coller collage spécial)
Le code enlève les espaces entre les mots et mets des tirets à la place
Le code remplace certains caractères é à et met des e a
Le code met toute la colonne en majuscules.
Le code de la macro verrouille le classeur
Vient ensuite, dans le fichier, des formules de recherches (rechercheV) qui analyses la colonne D travaillée par la macro et qui donne un résultat en fonction de cela...
Pour info, voilà l'une des formules
=SI(ESTVIDE(D4);" ";SI(ESTNA(RECHERCHEV(D4;Commune;1;0));"NON TROUVÉE";RECHERCHEV(D4;Commune;1;0)))
Voilà, en tout cas un grand merci à tout le monde.
Message pour le modérateur : j'indiquerais "résolu" après quelques jours, si personne n'a de suggestion(s) pour améliorer le code et le rendre plus efficace (travail sur 6000 lignes quand même).