Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Recherche et remplace d'un format par un autre

15 réponses
Avatar
JièL
Hello,

suite à mes problèmes de conversions de format euro, je change un peu
mon fusil d'épaule.

Je ne suis pas arrivé à faire une macro qui recherche un format et le
remplace par un autre. Je soupçonne que mon R&R ne fonctionne pas car il
y a des guillemets dans le format.

Je voudrais donc remplacer
_(€* # ##0,00_);_(€* (# ##0,00);_(€* "-"??_);_(@_)
par
_-* # ##0,00\ [$€-fr-FR]_-;-* # ##0,00\ [$€-fr-FR]_-;_-* "-"??\
[$€-fr-FR]_-;_-@_-

Merci pour le coup de main

--
JièL

5 réponses

1 2
Avatar
News.aioe.org
Nouveau classeur + explications à l'intérieur
http://www.cjoint.com/c/GAnml5UKLCi
Testé sous Windows 10 - Excel 2016 - Configurations à la française dans le
panneau de configurations de Windows.
Chez moi, tout est fonctionnel!
MichD
Avatar
JièL
Le 13/01/2017 à 13:15, News.aioe.org a écrit :
Nouveau classeur + explications à l'intérieur
http://www.cjoint.com/c/GAnml5UKLCi

En rouge et en gras ça se voit quand même beaucoup mieux ;-)
T'aurais pu faire clignoter aussi, non ? ;-)
Testé sous Windows 10 - Excel 2016 - Configurations à la française dans
le panneau de configurations de Windows.
Chez moi, tout est fonctionnel!

OK, dans ce cas de figure précis ça fonctionne aussi, ce que je faisait
pas c'est de cliquer sur le bouton "Appliquer le format de départ" car
je ne comprenais pas à quoi il servait, mais je n'ai toujours pas
compris pourquoi la macro plante si on clique directement sur le bouton
"Obtenir le format désiré" si on ne lance pas l'autre avant...
Ceci dit, ton exemple fonctionne UNIQUEMENT si on applique un (mauvais)
format AVANT de lancer la seconde macro. Mon pb est que dans les
milliards :-) de tableau que j'ai, le format est déjà défini et que je
ne vais pas m'amuser à sélectionner manuellement les cellules pour leur
mettre le (mauvais) format (autant mettre le bon directement :-p).
Et quand je fais un Recherche et Remplace par macro ça plante soit sur
la recherche soit sur le remplacement.
Bon, pour clore le sujet j'ai fini par faire ça
------------------------------
Dim Cherche, Remplace, i, j, x
Cherche = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Remplace = "_-* #,##0.00 [$€-40C]_-;-* #,##0.00 [$€-40C]_-;_-*
""-""?? [$€-40C]_-;"
Dim NbLignes, NbColonnes
NbLignes = ActiveSheet.UsedRange.Rows.Count
NbColonnes = ActiveSheet.UsedRange.Columns.Count
For i = 1 To NbLignes
For j = 1 To NbColonnes
x = Cells(i, j).NumberFormat
If x = Cherche Then
Cells(i, j).NumberFormat = Remplace
End If
Next
Next
------------------------------
c'est super moche et pas optimisé du tout, mais "ça fait la job" comme
on dit chez vous.
Heureusement que je n'a pas tant de données que ça dans ces tableaux.
Encore merci pour les tests de tous et pour ton implication MichD.
--
JièL démouscaillé
Avatar
News.aioe.org
Il est arrivé quelque chose à ton fichier...
Dans un classeur créé par Excel 2016,
A ) Je saisis une valeur numérique dans une cellule
B ) À l'aide de la liste déroulante du menu, j'applique le format
"Comptabilité"
C ) Je vérifie le symbole monétaire dans la fenêtre des formats en utilisant
le
menu contextuel - format de cellule
D ) Je constate qu'il n'y a que le symbole "€" et € (Français - France)
E ) J'enregistre ce fichier avec la ligne de code qu'il y a dans mon
classeur
ThisWorkbook.SaveAs ThisWorkbook.FullName, FileFormat:R, Local:=True
F ) Je ferme le classeur
G ) Surprise : la cellule affiche toujours le bon format de cellule,
exactement
le même qu'elle a reçu.
Ma question : Quel traitement a-t-il reçu pour que tu arrives à avoir le
format
que tu veux transformer?
Le "HIC" de ce format, c'est qu'il transforme le format comptabilité
en supprimant le symbole "€" que l'on retrouve normalement dans
la case "symbole monétaire" de la fenêtre des formats de cellules.
Si tu appuies sur le bouton "Obtenir le format désiré" à l'ouverture du
classeur que j'ai publié, la procédure recherche un format de cellule
qui n'appartient pas à Excel. ( Un format comptabilité qui n'a pas de
symbole monétaire - (à quoi peut bien servir un format comptabilité
sans symbole monétaire) ? C'est ce pour quoi (je pense) la macro
s'arrête sur la ligne .NumberFormat = Cherche . La procédure
modifie le format comptabilité et non le contenu des cellules.
La boucle fait le test du format, cellule par cellule, c'est autre chose!
Pour ce qui est de la macro, j'utiliserais plutôt ceci:
NbLignes = ActiveSheet.UsedRange.Rows.Count
A ) La notion de "UsedRange" est déficiente sur certaines
versions d'Excel, pas sur les dernières cependant.
B ) La macro que je soumets traite seulement les cellules
ayant un format numérique, par conséquent plus rapide
si les données ne sont pas toutes contigûes.
'----------------------------------------------------------
Sub Test()
Dim DerLig As Long, DerCol As Long
Dim Rg As Range, C As Range, F As String
Dim X As Long
Dim Cherche As String, Remplace As String
'Tes formats de cellules
Cherche = "_(€* # ##0.00_);_(€* (# ##0.00);_(€* ""-""??_);_(@_)"
Remplace = "_-* #,##0.00 [$€-fr-FR]_-;-* #,##0.00 [$€-fr-FR]_-;_-* ""-""??
[$€-fr-FR]_-;"
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Feuil1") 'Adapte le nom de la feuille
DerLig = .Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set Rg = .Range("A1", .Cells(DerLig, DerCol))
End With
For Each C In Rg.SpecialCells(xlCellTypeConstants, 1)
F = C.NumberFormat
If F = Cherche Then
C.NumberFormat = Remplace
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'----------------------------------------------------------
MichD
Avatar
JièL
Le 13/01/2017 à 16:28, News.aioe.org a écrit :
Il est arrivé quelque chose à ton fichier...

A mes milliards de fichier alors ?! ;-)
B ) À l'aide de la liste déroulante du menu, j'applique le format
"Comptabilité"

Stop, c'est là que ça ne va pas.
Dans les milliards de fichiers que j'ai, "on" à cliqué non pas sur la
liste déroulante mais sur le bouton "Format nombre comptabilité".
Je ne vais pas écrire sur un fond rouge, mais j'ai bien dit dès la
première fois : je me cite
mettez quelques chiffres dans quelques cellules que vous mettrez en
forme avec le bouton "Format nombre comptabilité" (pas la flèche à
coté) chez moi il ressemble à un billet et des pièces

voici l'image
http://www.cjoint.com/c/GAnp2KUr6Z6
C ) Je vérifie le symbole monétaire dans la fenêtre des formats en
utilisant le menu contextuel - format de cellule D ) Je constate
qu'il n'y a que le symbole "€" et € (Français - France) E )

Quand je vais dans "Personnalisé" ça correspond à ce format
_-* # ##0,00 €_-;-* # ##0,00 €_-;_-* "-"?? €_-;
J'enregistre ce fichier avec la ligne de code qu'il y a dans mon
classeur ThisWorkbook.SaveAs ThisWorkbook.FullName, FileFormat:R,
Local:=True

ok
F ) Je ferme le classeur

ok
G ) Surprise : la cellule affiche toujours
le bon format de cellule, exactement le même qu'elle a reçu.

Tu as oublié une étape : l'ouverture, toujours par macro, du même fichier.
Ma question : Quel traitement a-t-il reçu pour que tu arrives à avoir
le format que tu veux transformer?

Le traitement est celui ci
-------------------------
mettez quelques chiffres dans quelques cellules que vous mettrez en
forme avec le bouton "Format nombre comptabilité" (pas la flèche à coté)
chez moi il ressemble à un billet et des pièces
ensuite vous collez cette macro dans le classeur des macros personnelles
Sub Enreg_Ferme_Ouvre()
ActiveWorkbook.SaveAs Filename:="test1.xlsx"
ActiveWorkbook.Close
Workbooks.Open Filename:="test1.xlsx", local:=True
End Sub
et vous la lancez à partir du classeur où vous avez mis les nombre en roro.
---------------------------
Et je voudrais le transformer en vrais format euros français de france,
à savoir
_-* # ##0,00 [$€-fr-FR]_-;-* # ##0,00 [$€-fr-FR]_-;_-* "-"??
[$€-fr-FR]_-;
Pour ce qui est de la macro, j'utiliserais plutôt ceci: NbLignes > ActiveSheet.UsedRange.Rows.Count A ) La notion de "UsedRange" est
déficiente sur certaines versions d'Excel, pas sur les dernières
cependant.

Cette fonctionnalité est "déficiente" quand le classeur à été modifié et
pas fermé.
A partir du moment où l'on ferme puis réouvre le classeur le "pointeur"
se replace au bons endroits
(ça n'est jamais qu'un bug de plus ;-D)
B ) La macro que je soumets traite seulement les cellules ayant un
format numérique, par conséquent plus rapide si les données ne sont
pas toutes contigûes.

Sympa, je vais tester
'----------------------------------------------------------
Sub Test()
Dim DerLig As Long, DerCol As Long
Dim Rg As Range, C As Range, F As String
Dim X As Long
Dim Cherche As String, Remplace As String
'Tes formats de cellules
Cherche = "_(€* # ##0.00_);_(€* (# ##0.00);_(€* ""-""??_);_(@_)"
Remplace = "_-* #,##0.00 [$€-fr-FR]_-;-* #,##0.00 [$€-fr-FR]_-;_-* ""-""?? [$€-fr-FR]_-;"
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Feuil1") 'Adapte le nom de la feuille
DerLig = .Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set Rg = .Range("A1", .Cells(DerLig, DerCol))
End With
For Each C In Rg.SpecialCells(xlCellTypeConstants, 1)
F = C.NumberFormat
If F = Cherche Then
C.NumberFormat = Remplace
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'----------------------------------------------------------

Merci
--
JièL
Avatar
News.aioe.org
Dans le classeur que j'ai publié,
j'ai saisi une valeur et affecté cette cellule au format que tu as indiqué
en utilisant le bouton.
J'ai enregistré le classeur à l'aide de VBA, et je l'ai ouvert de nouveau à
l'aide d'une ligne de code.
Le format de la cellule n'a pas bronché. Surprenant n'est pas?
Pour ce qui est "UsedRange", je ne me souviens plus à partir de quelle
version
cela pose problème...Mais c'est OK pour 2016, et ce, sans fermer le
classeur!
Bon, à chacun sa façon de faire!
MichD
1 2