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

Dates en format Français et Us dans un fichier

11 réponses
Avatar
Al
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats mixtes
français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009 pour
le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être dans
un sens croissant, et à cause du format anglais, je ne sais plus gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al

10 réponses

1 2
Avatar
Patrick BASTARD
Bonjour, Al.
Les infos contenues dans les colonnes suivantes permettent-elles de
déterminer si la ligne est en anglais ou en français ?
Les dates en anglais ou en français) suivent-elles une règle permettant de
les repérer ? (Chaque 5° ligne par exemple)

Si ce n'est pas le cas, je ne vois pas comment Excel pourra deviner.
A moins qu'un test sur l'ordre croissant ???

Un fichier exemple permettrait de creuser plus avant (cjoint.com).

--
Bien ,

Patrick
patrick.bastardchezdbmail.com


"Al" a écrit dans le message de
news:4a0fcf15$0$16588$
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats
mixtes français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009
pour le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être
dans un sens croissant, et à cause du format anglais, je ne sais plus
gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al





Avatar
MichDenis
Bonjour Al,

Essaie cette macro pour la colonne contenant tes dates.

Adapte dans la macro, le nom de la feuille et la plage de
cellules concernées.
(procédure à tester ! )
'----------------------------------------
Sub test()
Dim Rg As Range, T()
Dim X, A As Long, B As Integer
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), "-")
If Val(T(0)) <= 12 Then
tt = T(1) & "-" & T(0) & "-" & T(2)
X(A, B) = T(1) & "-" & T(0) & "-" & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'----------------------------------------



"Al" a écrit dans le message de groupe de discussion :
4a0fcf15$0$16588$
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats mixtes
français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009 pour
le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être dans
un sens croissant, et à cause du format anglais, je ne sais plus gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al
Avatar
MichDenis
Ceci est la même procédure, mais elle gère automatiquement
le séparateur des éléments d'une date défini dans le panneau
de configuration :

NB- La fonction Split() requiert Excel 2000 ou plus récent.
'--------------------------------------
Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer

Sep = Application.International(xlDateSeparator)
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = T(1) & Sep & T(0) & Sep & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'--------------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :
#
Bonjour Al,

Essaie cette macro pour la colonne contenant tes dates.

Adapte dans la macro, le nom de la feuille et la plage de
cellules concernées.
(procédure à tester ! )
'----------------------------------------
Sub test()
Dim Rg As Range, T()
Dim X, A As Long, B As Integer
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), "-")
If Val(T(0)) <= 12 Then
tt = T(1) & "-" & T(0) & "-" & T(2)
X(A, B) = T(1) & "-" & T(0) & "-" & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'----------------------------------------



"Al" a écrit dans le message de groupe de discussion :
4a0fcf15$0$16588$
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats mixtes
français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009 pour
le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être dans
un sens croissant, et à cause du format anglais, je ne sais plus gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al
Avatar
Al
Merci, super,
Ca marche.....

"MichDenis" a écrit dans le message de news:

Ceci est la même procédure, mais elle gère automatiquement
le séparateur des éléments d'une date défini dans le panneau
de configuration :

NB- La fonction Split() requiert Excel 2000 ou plus récent.
'--------------------------------------
Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer

Sep = Application.International(xlDateSeparator)
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = T(1) & Sep & T(0) & Sep & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'--------------------------------------



"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour Al,

Essaie cette macro pour la colonne contenant tes dates.

Adapte dans la macro, le nom de la feuille et la plage de
cellules concernées.
(procédure à tester ! )
'----------------------------------------
Sub test()
Dim Rg As Range, T()
Dim X, A As Long, B As Integer
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), "-")
If Val(T(0)) <= 12 Then
tt = T(1) & "-" & T(0) & "-" & T(2)
X(A, B) = T(1) & "-" & T(0) & "-" & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'----------------------------------------



"Al" a écrit dans le message de groupe de discussion :
4a0fcf15$0$16588$
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats
mixtes
français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009
pour
le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être
dans
un sens croissant, et à cause du format anglais, je ne sais plus
gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al



Avatar
Al
Bonjour,

Dans un fichier test, ta macro marche, mais quand je l'inclue dans un autre
ficher
UBound(X,1) me donne une erreur "Tableau attendu"

Peux tu m'aider ?

D'avance Merci
Al


"Al" a écrit dans le message de news:
4a105ade$0$27592$
Merci, super,
Ca marche.....

"MichDenis" a écrit dans le message de news:

Ceci est la même procédure, mais elle gère automatiquement
le séparateur des éléments d'une date défini dans le panneau
de configuration :

NB- La fonction Split() requiert Excel 2000 ou plus récent.
'--------------------------------------
Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer

Sep = Application.International(xlDateSeparator)
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = T(1) & Sep & T(0) & Sep & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'--------------------------------------



"MichDenis" a écrit dans le message de groupe de
discussion :
#
Bonjour Al,

Essaie cette macro pour la colonne contenant tes dates.

Adapte dans la macro, le nom de la feuille et la plage de
cellules concernées.
(procédure à tester ! )
'----------------------------------------
Sub test()
Dim Rg As Range, T()
Dim X, A As Long, B As Integer
With Worksheets("Feuil1")
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), "-")
If Val(T(0)) <= 12 Then
tt = T(1) & "-" & T(0) & "-" & T(2)
X(A, B) = T(1) & "-" & T(0) & "-" & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'----------------------------------------



"Al" a écrit dans le message de groupe de discussion :
4a0fcf15$0$16588$
Bonjour,

Je récupère, en téléchargement dans un fichier, des dates en formats
mixtes
français et anglais tel que
30/04/2009 pour le 30 avril, et dans une cellule au dessous 05/04/2009
pour
le 4 Mai 2009.
Mes opérations sur les dates ne marchent pas (les dates devraient être
dans
un sens croissant, et à cause du format anglais, je ne sais plus
gérer....)

Pouvez vous m'aidez ?

D'avance merci à tous
Al







Avatar
MichDenis
| UBound(X,1) me donne une erreur "Tableau attendu"

Quand tu as défini ta plage de cellules par ce code :

Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value

Si la variable "Range" Rg ne représente qu'une cellule alors
X ne sera pas une variable de type tableau (colonne par y lignes)
mais représentera simplement la valeur d'une cellule

En conséquence, on ne peut pas ces lignes de code car elle
suppose que X est un tableau à 2 dimensions.

For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
Avatar
Jacquouille
Salut Denis
Perso, j'ai un grand tableau de 7500 lignes X 26 col.(voir mon msg "titre de
colonne"
La macro bute sur cette ligne:
T = Split(X(A, B), "/") ... et mes séparateurs sont bien de "/".
-------------------
Sub AAtest()
Dim Rg As Range, T()
Dim X, A As Long, B As Integer
With Worksheets("CopieBase")
Set Rg = .Range("H2:H" & .Range("H65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), "/")
If Val(T(0)) <= 12 Then
tt = T(1) & "/" & T(0) & "/" & T(2)
X(A, B) = T(1) & "/" & T(0) & "/" & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
------------------

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"MichDenis" a écrit dans le message de news:

| UBound(X,1) me donne une erreur "Tableau attendu"

Quand tu as défini ta plage de cellules par ce code :

Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = Rg.Value

Si la variable "Range" Rg ne représente qu'une cellule alors
X ne sera pas une variable de type tableau (colonne par y lignes)
mais représentera simplement la valeur d'une cellule

En conséquence, on ne peut pas ces lignes de code car elle
suppose que X est un tableau à 2 dimensions.

For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)









Avatar
MichDenis
Si tu dois retenir une procédure, c'est celle-ci :

Si cela génère une erreur, tu me dis qu'elle est le
message d'erreur.

Cette macro utilise comme séparateur de date celui
définit dans le panneau de configuration de Windows.

Si tu as des cellules au format texte, il se peut que le
contenu de la cellule utilise un autre séparateur de date
que celui définit dans Windows. Alors, il faut adapter
la valeur de la variable "sep"

'---------------------------------------------------------
Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer

Sep = Application.International(xlDateSeparator)
With Worksheets("CopieBase")
Set Rg = .Range("H2:H" & .Range("H65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = T(1) & Sep & T(0) & Sep & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'--------------------------------------
Avatar
Jacquouille
Bonsoir Denis
Je t'ai envoyé le fichier litigieux en BAL perso.
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"MichDenis" a écrit dans le message de news:
%
Si tu dois retenir une procédure, c'est celle-ci :

Si cela génère une erreur, tu me dis qu'elle est le
message d'erreur.

Cette macro utilise comme séparateur de date celui
définit dans le panneau de configuration de Windows.

Si tu as des cellules au format texte, il se peut que le
contenu de la cellule utilise un autre séparateur de date
que celui définit dans Windows. Alors, il faut adapter
la valeur de la variable "sep"

'---------------------------------------------------------
Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer

Sep = Application.International(xlDateSeparator)
With Worksheets("CopieBase")
Set Rg = .Range("H2:H" & .Range("H65536").End(xlUp).Row)
X = Rg.Value
End With
For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = T(1) & Sep & T(0) & Sep & T(2)
End If
Next
Next
Rg.Clear
Rg.NumberFormat = "DD/MM/YY"
Rg.Value = X
End Sub
'--------------------------------------





Avatar
MichDenis
voici la procédure modifiée :

Sub test()
Dim Rg As Range, T, Sep As String
Dim X, A As Long, B As Integer
Dim C As Range

Sep = Application.International(xlDateSeparator)
With Worksheets("feuil1")
Set Rg = .Range("A2:B" & .Range("B65536").End(xlUp).Row)
For Each C In Rg.Columns
With C
.Replace "/", "-"
X = C
End With

For A = 1 To UBound(X, 1)
For B = 1 To UBound(X, 2)
T = Split(X(A, B), Sep)
If Val(T(0)) <= 12 Then
X(A, B) = CDate(T(1) & Sep & T(0) & Sep & T(2))
Else
X(A, B) = CDate(X(A, B))
End If
Next
Next
C.Clear
C.NumberFormat = "DD/MM/YY"
C.Value = X
Next
End With
End Sub
1 2