A voir également:
- Replace format vba
- Macro excel remplacer une valeur par une autre - Meilleures réponses
- Remplacer une valeur par une autre dans une colonne excel vba - Meilleures réponses
- [VBA Excel] rechercher/remplacer & format ✓ - Forum - VB / VBA
- Vba excel recherche chaine de caractère dans cellule ✓ - Forum - VB / VBA
- Vba excel rechercher une valeur dans une colonne - Conseils pratiques - Visual Basic
- Excel rechercher remplacer ne fonctionne pas ✓ - Forum - Excel
- [vba] recherche d'une valeur EXACTE ✓ - Forum - VB / VBA
13 réponses
The Flow
Ca fonctionne merci mille fois !
J'ai utilisé ce code pour deux colonnes :
Ce n'est peut-être pas super clean, mais ça fonctionne ;)
J'ai utilisé ce code pour deux colonnes :
Dim c As Range, d As String, erreurs As String For Each c In Range([J1], [J65536].End(xlUp)) d = Replace(c, ".", "/") If IsDate(d) Then c = DateValue(d) Else erreurs = erreurs & c.Row & "-" End If Next c For Each c In Range([F1], [F65536].End(xlUp)) d1 = Replace(c, ".", "/") If IsDate(d1) Then c = DateValue(d) Else erreurs = erreurs & c.Row & "-" End If Next c
Ce n'est peut-être pas super clean, mais ça fonctionne ;)
kimclem
- Messages postés
- 12
- Date d'inscription
- jeudi 13 mars 2008
- Statut
- Membre
- Dernière intervention
- 19 août 2009
je suis moi même un débutant en VB mais j'ai intégrer la fonction rechercher remplacer une fois dans une macro.
Cela fonctionnait correctement sauf que le contenu n'était pas hmm "rafraichi" dirons nous, peut être que c'est le même cas pour toi.
Manipulation toute bête, après ta macro tu ouvres un rechercher remplacer : rechercher sur : "/" et remplacer sur : "/".
Cela n'effectuera aucun changement sur le contenu de tes cellules mais tout sera rafraichi et mes #valeurs se transformaient en nombre.
J'espère avoir pu te donner un coup de pouce :)
Clément
Cela fonctionnait correctement sauf que le contenu n'était pas hmm "rafraichi" dirons nous, peut être que c'est le même cas pour toi.
Manipulation toute bête, après ta macro tu ouvres un rechercher remplacer : rechercher sur : "/" et remplacer sur : "/".
Cela n'effectuera aucun changement sur le contenu de tes cellules mais tout sera rafraichi et mes #valeurs se transformaient en nombre.
J'espère avoir pu te donner un coup de pouce :)
Clément
The Flow
Ce que tu me proposes est exactement la manipulation manuelle par laquelle je passe faute de trouver mieux :) Peut-être qu'il faut juste trouver un moyen de coder une fonction "rafraîchir" comme tu dis.
kimclem
- Messages postés
- 12
- Date d'inscription
- jeudi 13 mars 2008
- Statut
- Membre
- Dernière intervention
- 19 août 2009
ta macro n'effectue qu'un rechercher remplacer ? :)
si oui, je ne comprends pas pourquoi faire une macro, pour ma part elle ne faisait pas que rechercher remplacer donc la solution bidouille me convenait proprement, surtout que c'était a des fins privés, après si des clients doivent la manipuler, ce n'est pas tres propre mais le "rafraichir" je n'ai pas trouvé désolé
si oui, je ne comprends pas pourquoi faire une macro, pour ma part elle ne faisait pas que rechercher remplacer donc la solution bidouille me convenait proprement, surtout que c'était a des fins privés, après si des clients doivent la manipuler, ce n'est pas tres propre mais le "rafraichir" je n'ai pas trouvé désolé
The Flow
Ce n'est qu'une étape parmi d'autre dans ma macro, donc j'ai vraiment besoin de l'automatiser :)
redonky
- Messages postés
- 102
- Date d'inscription
- jeudi 2 avril 2009
- Statut
- Membre
- Dernière intervention
- 31 octobre 2010
Range(ta cellule).numberformat = "m/d/yyyy"
ou encore peut être mieux pour toi
Columns(ta colonne).numberformat = "m/d/yyyy"
ou encore peut être mieux pour toi
Columns(ta colonne).numberformat = "m/d/yyyy"
The Flow
Voici mon code :
Malheureusement, cela ne fonctionne toujours pas. Après avoir effectué cette macro, le changement de format ne s'effectue que si je procède à un rechercher/remplacer des "/" par des "/". La macro réalise bien le changement du caractère des "." par des "/", mais doit altérer la valeur de la cellule. En effet, Excel parvient à me trouver 12000 cellules pour lesquelles des "/" remplacés par des "/"... il y a de quoi s'arracher les cheveux...
Les valeurs contenues dans mes cellules du champ "date" sont pures, il n'y a pas de ="..." pour encadrer la date. Il n'y a donc rien pour empêcher le changement de format.
J'ai essayé de faire une macro qui consisterait à copier toute la colonne et à coller les valeurs dans une nouvelle, mais cela ne fonctionne pas...
Quelqu'un aurait-il une autre solution à proposer ?
merci d'avoir répondu !
Columns("F:F").Select Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=True, _ ReplaceFormat:=True Columns("F:F").NumberFormat = "m/d/yyyy"
Malheureusement, cela ne fonctionne toujours pas. Après avoir effectué cette macro, le changement de format ne s'effectue que si je procède à un rechercher/remplacer des "/" par des "/". La macro réalise bien le changement du caractère des "." par des "/", mais doit altérer la valeur de la cellule. En effet, Excel parvient à me trouver 12000 cellules pour lesquelles des "/" remplacés par des "/"... il y a de quoi s'arracher les cheveux...
Les valeurs contenues dans mes cellules du champ "date" sont pures, il n'y a pas de ="..." pour encadrer la date. Il n'y a donc rien pour empêcher le changement de format.
J'ai essayé de faire une macro qui consisterait à copier toute la colonne et à coller les valeurs dans une nouvelle, mais cela ne fonctionne pas...
Quelqu'un aurait-il une autre solution à proposer ?
merci d'avoir répondu !
redonky
- Messages postés
- 102
- Date d'inscription
- jeudi 2 avril 2009
- Statut
- Membre
- Dernière intervention
- 31 octobre 2010
En essayant juste ça
Columns("F:F").NumberFormat = "m/d/yyyy"
ou ça
Columns("F:F").Select
Selection.numberformat = "m/d/yyyy"
ou dans ton code actuel remplacer
Columns("H:H")..numberformat = "m/d/yyyy"
par
Selection.numberformat = "m/d/yyyy"
?
Columns("F:F").NumberFormat = "m/d/yyyy"
ou ça
Columns("F:F").Select
Selection.numberformat = "m/d/yyyy"
ou dans ton code actuel remplacer
Columns("H:H")..numberformat = "m/d/yyyy"
par
Selection.numberformat = "m/d/yyyy"
?
eriiic
- Messages postés
- 23887
- Date d'inscription
- mardi 11 septembre 2007
- Statut
- Contributeur
- Dernière intervention
- 22 février 2021
Bonsoir,
Méfie toi des dates en vba, il se refuse souvent à reconnaitre le format imposé dans les paramètres régionaux.
Et heureusement que tu en as eu de non converties ce qui t'a alerté, mais en fait celles qui sont converties sont sûrement fausses (jour et mois inversés...)
Essaie avec :
Sub convDate()
Dim c As Range
For Each c In Range([F1], [F65536].End(xlUp))
c = DateValue(Replace(c, ".", "/"))
Next c
End Sub
Si tu es sur excel 2007 remplace F65536 par la dernière cellule.
Et en règle général si l'affichage ne correspond pas à ce que tu attends (puisque ça fait 2 fois que tu as un soucis de format) contrôle de près le contenu de la cellule et le type, surtout si une simple application du format voulu ne résoud pas le pb. Si la données est conforme excel applique en général le bon format.
Et comme tu commences à être un habitué ;-) tu devrais t'inscrire.
Ca te permettra de suivre plus facilement tes conversations, et de les mettre en résolu le moment venu (ça c'est plus pour les helpers, ça évite de lire 10 posts pour voir que finalement il n'y a plus de pb...). Merci
eric
.
Méfie toi des dates en vba, il se refuse souvent à reconnaitre le format imposé dans les paramètres régionaux.
Et heureusement que tu en as eu de non converties ce qui t'a alerté, mais en fait celles qui sont converties sont sûrement fausses (jour et mois inversés...)
Essaie avec :
Sub convDate()
Dim c As Range
For Each c In Range([F1], [F65536].End(xlUp))
c = DateValue(Replace(c, ".", "/"))
Next c
End Sub
Si tu es sur excel 2007 remplace F65536 par la dernière cellule.
Et en règle général si l'affichage ne correspond pas à ce que tu attends (puisque ça fait 2 fois que tu as un soucis de format) contrôle de près le contenu de la cellule et le type, surtout si une simple application du format voulu ne résoud pas le pb. Si la données est conforme excel applique en général le bon format.
Et comme tu commences à être un habitué ;-) tu devrais t'inscrire.
Ca te permettra de suivre plus facilement tes conversations, et de les mettre en résolu le moment venu (ça c'est plus pour les helpers, ça évite de lire 10 posts pour voir que finalement il n'y a plus de pb...). Merci
eric
.
The Flow
Ton code fonctionne ! Cependant j'ai une erreur d'exécution '13' : incompatibilité de type.
J'ai jeté un coup d'oeil à ma colonne, chacune des cellules ont bien été traitées jusqu'à ce qu'Excel tombe sur une qui cafouille. En effet, il s'agit d'une coquille dont la cellule n'est pas au bon format (il y a eu un décalage dans mes extracts uniquement sur cette ligne), du coup il refuse de la prendre en compte et met fin au processus.
Je pense qu'on devrait pouvoir toucher au but en indiquant un truc du genre "si pendant le rechercher/remplacer on tombe sur une valeur bizarre, alors on l'ignore et on passe à la suivante".
Savez vous traduire ça en VBA svp ? :p
J'ai jeté un coup d'oeil à ma colonne, chacune des cellules ont bien été traitées jusqu'à ce qu'Excel tombe sur une qui cafouille. En effet, il s'agit d'une coquille dont la cellule n'est pas au bon format (il y a eu un décalage dans mes extracts uniquement sur cette ligne), du coup il refuse de la prendre en compte et met fin au processus.
Je pense qu'on devrait pouvoir toucher au but en indiquant un truc du genre "si pendant le rechercher/remplacer on tombe sur une valeur bizarre, alors on l'ignore et on passe à la suivante".
Savez vous traduire ça en VBA svp ? :p
eriiic
- Messages postés
- 23887
- Date d'inscription
- mardi 11 septembre 2007
- Statut
- Contributeur
- Dernière intervention
- 22 février 2021
Bonjour,
Essaie avec ça :
eric
Essaie avec ça :
Sub convDate() Dim c As Range, d As String, erreurs As String For Each c In Range([F1], [F65536].End(xlUp)) d = Replace(c, ".", "/") If IsDate(d) Then c = DateValue(d) Else erreurs = erreurs & c.Row & "-" End If Next c If Len(erreurs) Then MsgBox ("Lignes non conformes :" & vbCrLf & erreurs) End Sub
eric
The Flow
Erratum :
Dim c As Range, d As String, erreurs As String For Each c In Range([F1], [F65536].End(xlUp)) d = Replace(c, ".", "/") If IsDate(d) Then c = DateValue(d) Else erreurs = erreurs & c.Row & "-" End If Next c Dim x As Range, y As String, erreurs2 As String For Each x In Range([J1], [J65536].End(xlUp)) y = Replace(x, ".", "/") If IsDate(y) Then x = DateValue(y) Else erreurs2 = erreurs2 & x.Row & "-" End If Next x
eriiic
- Messages postés
- 23887
- Date d'inscription
- mardi 11 septembre 2007
- Statut
- Contributeur
- Dernière intervention
- 22 février 2021
Bonsoir,
merci pour le retour :-)
Si tu n'affiches pas les erreurs tu peux enlever les else et ce qu'il y a dedans.
Et tu pouvais réutiliser les variables vu qu'elles sont libres à la fin de la 1ère boucle...
Si tu reposes une question tu devrais t'inscrire, ça te permettra de mieux suivre les réponses, et de mettre en résolu une fois que c'est terminé (ça évite à un helper de tout lire pour voir que c'est fini)
Je le met à ta place
eric
merci pour le retour :-)
Si tu n'affiches pas les erreurs tu peux enlever les else et ce qu'il y a dedans.
Et tu pouvais réutiliser les variables vu qu'elles sont libres à la fin de la 1ère boucle...
Si tu reposes une question tu devrais t'inscrire, ça te permettra de mieux suivre les réponses, et de mettre en résolu une fois que c'est terminé (ça évite à un helper de tout lire pour voir que c'est fini)
Je le met à ta place
eric