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

Manipulation d'un range complet

6 réponses
Avatar
ThierryP
Bonjour le forum et Denis !

Je récupère des données via une exportation depuis un logiciel.
Les dates se présentent comme ceci : 06.04.2022, forcément Excel n'aime pas trop !
Donc, je boucle sur la colonne en faisant ca :
Range("F" & i) = DateSerial(Right(Range("F" & i), 4), Mid(Range("F" & i), 4, 2), Left(Range("F" & i), 2))

Est-il possible de faire ça d'un coup ? Quelque chose du genre :
Set Rg2 = Range("F3:F" & .Range("F" & .Rows.Count).End(xlUp).Row), ca c'est OK !
Mais si je fais :
Rg2 = DateSerial(Right(Rg2, 4), Mid(Rg2, 4, 2), Left(Rg2, 2))
ça plante (sinon je ne serais pas lÍ  !!!).

Merci d'avance Í  tout généreux contributeur (Denis, au hasard !!!)

ThierryP

6 réponses

Avatar
MichD
Le 06/04/22 Í  05:02, ThierryP a écrit :
Bonjour le forum et Denis !
Je récupère des données via une exportation depuis un logiciel.
Les dates se présentent comme ceci : 06.04.2022, forcément Excel n'aime pas trop !
Donc, je boucle sur la colonne en faisant ca :
Range("F" & i) = DateSerial(Right(Range("F" & i), 4), Mid(Range("F" & i), 4, 2), Left(Range("F" & i), 2))
Est-il possible de faire ça d'un coup ? Quelque chose du genre :
Set Rg2 = Range("F3:F" & .Range("F" & .Rows.Count).End(xlUp).Row), ca c'est OK !
Mais si je fais :
Rg2 = DateSerial(Right(Rg2, 4), Mid(Rg2, 4, 2), Left(Rg2, 2))
ça plante (sinon je ne serais pas lÍ  !!!).
Merci d'avance Í  tout généreux contributeur (Denis, au hasard !!!)
ThierryP

Bonjour,
Essaie comme ceci:
'--------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("F3:F" & .Range("F" & .Rows.Count).End(xlUp).Row)
.NumberFormat = "DD-MM-YYYY"
.Replace What:=".", replacement:="-", LookAt:=xlPart
End With
End With
End Sub
'--------------------------------
MichD
Avatar
ThierryP
Parfait, comme d'habitude :-):-)
Un tout grand merci,
ThierryP
Avatar
ThierryP
Juste un petiit souci de conversion.....
Ta macro me renvoyait des dates au format américain, donc j'ai modifié le format en MM-DD-YYYY mais du coup certaines dates restent au format "texte", d'autres sont reconnues comme dates. Ex :
13.08.2020 devient 13/08/2020 et si je passe en format standard, c'est 13/08/2020 qui est écrit dans la cellule
10.12.2020 deveint 10/12/2020 et si je passe en format standard, c'est bien 44116 (N° de série) qui est écrit dans la cellule.
Et comme j'ai besoin de trier sur cette colonne, forcément j'ai des problèmes ! C'est d'ailleurs pour ça que je passais par DateSerial en bouclant pour écrire mes dates.
Mais je suis sÍ»r que ce n'est pas un vrai problème pour toi !
ThierryP
Avatar
MichD
Le 06/04/22 Í  10:29, ThierryP a écrit :
Juste un petiit souci de conversion.....
Ta macro me renvoyait des dates au format américain, donc j'ai modifié le format en MM-DD-YYYY mais du coup certaines dates restent au format "texte", d'autres sont reconnues comme dates. Ex :
13.08.2020 devient 13/08/2020 et si je passe en format standard, c'est 13/08/2020 qui est écrit dans la cellule
10.12.2020 deveint 10/12/2020 et si je passe en format standard, c'est bien 44116 (N° de série) qui est écrit dans la cellule.
Et comme j'ai besoin de trier sur cette colonne, forcément j'ai des problèmes ! C'est d'ailleurs pour ça que je passais par DateSerial en bouclant pour écrire mes dates.
Mais je suis sÍ»r que ce n'est pas un vrai problème pour toi !
ThierryP

On va changer d'approche
'------------------------------------
Sub test()
Dim T As Variant, A As Long, B As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Feuil1")
With With .Range("F3:F" & .Range("F" & .Rows.Count).End(xlUp).Row)
T = .Value
For A = 1 To UBound(T, 1)
For B = 1 To UBound(T, 2)
T(A, B) = Replace(T(A, B), ".", "/")
.Item(A) = CDate(T(A, B))
Next
Next
End With
End With
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
'------------------------------------
MichD
Avatar
MichD
Le 06/04/22 Í  10:29, ThierryP a écrit :
Juste un petiit souci de conversion.....
Ta macro me renvoyait des dates au format américain, donc j'ai modifié le format en MM-DD-YYYY mais du coup certaines dates restent au format "texte", d'autres sont reconnues comme dates. Ex :
13.08.2020 devient 13/08/2020 et si je passe en format standard, c'est 13/08/2020 qui est écrit dans la cellule
10.12.2020 deveint 10/12/2020 et si je passe en format standard, c'est bien 44116 (N° de série) qui est écrit dans la cellule.
Et comme j'ai besoin de trier sur cette colonne, forcément j'ai des problèmes ! C'est d'ailleurs pour ça que je passais par DateSerial en bouclant pour écrire mes dates.
Mais je suis sÍ»r que ce n'est pas un vrai problème pour toi !
ThierryP

Par l'interface de calcul, il y a une méthode facile et rapide :
Onglet : accueil du menu
À l'extrême droite : "Rechercher et sélectionner"
dans le sous-menu, choisir la commande :"Remplacer"
Dans le textbox
Rechercher : .
Remplacer : /
Appuie sur le bouton "remplacer tout"
Il faut se rappeler que l'interface de calcul utilise les paramètres
régionaux définis dans le panneau de configuration de Windows tandis
qu'en VBA, c'est par défaut les paramètres américains. Le format date
américain par défaut est Mois/jour/année. Lorsque la date contenue dans
une cellule ne peut pas s'adapter au format américain comme 16.12.2022
parce que 16 ne peut être un "mois" (seulement 12 mois par année), il
adopte le format défini dans les paramètres régionaux de Windows.
MichD
Avatar
ThierryP
Le jeudi 7 avril 2022 Í  12:54:47 UTC+2, MichD a écrit :
Le 06/04/22 Í  10:29, ThierryP a écrit :
Juste un petiit souci de conversion.....
Ta macro me renvoyait des dates au format américain, donc j'ai modifié le format en MM-DD-YYYY mais du coup certaines dates restent au format "texte", d'autres sont reconnues comme dates. Ex :
13.08.2020 devient 13/08/2020 et si je passe en format standard, c'est 13/08/2020 qui est écrit dans la cellule
10.12.2020 deveint 10/12/2020 et si je passe en format standard, c'est bien 44116 (N° de série) qui est écrit dans la cellule.
Et comme j'ai besoin de trier sur cette colonne, forcément j'ai des problèmes ! C'est d'ailleurs pour ça que je passais par DateSerial en bouclant pour écrire mes dates.
Mais je suis sÍ»r que ce n'est pas un vrai problème pour toi !
ThierryP
Par l'interface de calcul, il y a une méthode facile et rapide :
Onglet : accueil du menu
À l'extrême droite : "Rechercher et sélectionner"
dans le sous-menu, choisir la commande :"Remplacer"
Dans le textbox
Rechercher : .
Remplacer : /
Appuie sur le bouton "remplacer tout"
Il faut se rappeler que l'interface de calcul utilise les paramètres
régionaux définis dans le panneau de configuration de Windows tandis
qu'en VBA, c'est par défaut les paramètres américains. Le format date
américain par défaut est Mois/jour/année. Lorsque la date contenue dans
une cellule ne peut pas s'adapter au format américain comme 16.12.2022
parce que 16 ne peut être un "mois" (seulement 12 mois par année), il
adopte le format défini dans les paramètres régionaux de Windows.
MichD

Merci Denis pour les explications complémentaires !
Mais comme je fais un tas de traitement sur les données reçues, je veux éviter les manipulations "manuelles" par des utilisateurs qui ne connaissnt pas trop Excel !
Le nouvelle variante fonctionne parfaitement, c'est impeccable !
Merci,
ThierryP