begin process at 2012 02 17 02:44:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > VBA EXCEL TRANSFORME UNE DATE ENREGISTRÉE AU FORMAT ANGLAIS (BOGUE D'INVERSION MOIS / JOUR)

VBA EXCEL TRANSFORME UNE DATE ENREGISTRÉE AU FORMAT ANGLAIS (BOGUE D'INVERSION MOIS / JOUR)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Classé sous :format, type, date, mois, jour Niveau :Débutant Date de création :23/03/2006 Date de mise à jour :14/04/2006 17:17:18 Vu :29 782

Auteur : FENETRES

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
A ma grande surprise, je constate qu'il existe encore des fichiers Excel contenant l'anomalie liée au format date anglais(cf. pièce jointe). Notez l'inversion entre le format affiché (01/02/2006) et le format enregistré (02/01/2006).

Source

  • Sub setRegionalDate(ByVal FirstLineIndex As Long, ByVal LastLineIndex As Long, ByVal ColIndex As Long)
  • 'Version 1 : corrige pour l'intervalle spécifié toutes les dates
  • 'enregistrées au format anglais (bogue d'inversion)
  • 'Variables de traitement
  • Dim myDate As Date
  • Dim i As Long
  • ' Paramètres à définir pour chaque traitement :
  • ' - FirstLineIndex N° de la première ligne à traiter
  • ' - LastLineIndex N° de la dernière ligne à traiter
  • ' - ColIndex N° de la colonne à traiter
  • ' Exemple d'utilisation :
  • ' call setRegionalDate(1, 253, 2) Vérifie et corrige le format date pour l'intervalle
  • ' de lignes [1, 253] de la colonne 2.
  • 'Gestionnaire d'erreur
  • On Error GoTo Except
  • For i = FirstLineIndex To LastLineIndex
  • 'Sélectionne la cellule
  • Cells(i, ColIndex).Select
  • With Selection
  • If IsDate(.Value) Then
  • 'Condition d'inversion
  • If .NumberFormat = "mm/dd/yyyy" Then
  • 'Mémorise la date
  • myDate = .Value
  • 'Transforme le type du format date
  • .NumberFormat = "dd/mm/yyyy"
  • 'Transforme la date en inversant les valeurs du mois et du jour
  • .Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
  • End If
  • End If
  • End With
  • Next i
  • Exit Sub
  • Except:
  • Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
  • Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
  • End Sub
  • -----------------------------------------------------------------------------------------
  • Sub setRegionalDate()
  • 'Version 2 : corrige pour la plage sélectionnée toutes les dates
  • 'enregistrées au format anglais (bogue d'inversion)
  • 'Variables de traitement
  • Dim myDate As Date
  • Dim myRange As Range
  • Dim i As Long, j As Long
  • 'Gestionnaire d'erreur
  • On Error GoTo Except
  • 'Boîte de dialogue : demande de confirmation
  • i = Selection.Cells.Count
  • If i = 1 Then
  • If MsgBox(vbCr & "Demande de confirmation" & vbCr & vbCr & _
  • "Une seule cellule est sélectionnée. Confirmez votre sélection ?" & Space(6), vbQuestion + vbYesNo, _
  • " Fonction de correction du type date") = vbNo Then Exit Sub
  • End If
  • For Each myRange In Selection
  • If IsDate(myRange) Then
  • With myRange
  • 'Condition d'inversion
  • If .NumberFormat = "mm/dd/yyyy" Then
  • 'Mémorise la date
  • myDate = .Value
  • 'Transforme le type du format date
  • .NumberFormat = "dd/mm/yyyy"
  • 'Transforme la date en inversant les valeurs du mois et du jour
  • .Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
  • If Month(.Value) <> Month(myDate) Then j = j + 1
  • End If
  • End With
  • End If
  • Next
  • 'Boîte de dialogue : nbre de dates corrigées sur nbre de cellules vérifiées
  • Call MsgBox(vbCr & "Résultat du traitement :" & vbCr & vbCr & _
  • j & " date(s) corrigée(s) sur " & i & " cellule(s) sélectionnée(s)." & Space(6), vbInformation + vbOKOnly, _
  • " Fonction de correction du type date")
  • Exit Sub
  • Except:
  • 'Boîte de dialogue : message d'erreur
  • Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
  • Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
  • End Sub
  • -----------------------------------------------------------------------------------------
Sub setRegionalDate(ByVal FirstLineIndex As Long, ByVal LastLineIndex As Long, ByVal ColIndex As Long)
'Version 1 : corrige pour l'intervalle spécifié toutes les dates 
'enregistrées au format anglais (bogue d'inversion)

'Variables de traitement
Dim myDate As Date
Dim i As Long

'  Paramètres à définir pour chaque traitement :
'  - FirstLineIndex               N° de la première ligne à traiter
'  - LastLineIndex                N° de la dernière ligne à traiter
'  - ColIndex                     N° de la colonne à traiter
'  Exemple d'utilisation :
'   call setRegionalDate(1, 253, 2)   Vérifie et corrige le format date pour l'intervalle
'                                     de lignes [1, 253] de la colonne 2.

'Gestionnaire d'erreur
On Error GoTo Except

   For i = FirstLineIndex To LastLineIndex
      'Sélectionne la cellule
      Cells(i, ColIndex).Select
      With Selection
         If IsDate(.Value) Then
          'Condition d'inversion
            If .NumberFormat = "mm/dd/yyyy" Then
               'Mémorise la date
               myDate = .Value
               'Transforme le type du format date
               .NumberFormat = "dd/mm/yyyy"
               'Transforme la date en inversant les valeurs du mois et du jour
               .Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
            End If
         End If
      End With
   Next i
   
   Exit Sub
Except:
   Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
                       Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
End Sub
-----------------------------------------------------------------------------------------
Sub setRegionalDate()
'Version 2 : corrige pour la plage sélectionnée toutes les dates
'enregistrées au format anglais (bogue d'inversion)

'Variables de traitement
Dim myDate As Date
Dim myRange As Range
Dim i As Long, j As Long

   'Gestionnaire d'erreur
   On Error GoTo Except
   
   'Boîte de dialogue : demande de confirmation
   i = Selection.Cells.Count
   If i = 1 Then
      If MsgBox(vbCr & "Demande de confirmation" & vbCr & vbCr & _
                       "Une seule cellule est sélectionnée. Confirmez votre sélection ?" & Space(6), vbQuestion + vbYesNo, _
                       " Fonction de correction du type date") = vbNo Then Exit Sub
   End If
   
   For Each myRange In Selection
      If IsDate(myRange) Then
         With myRange
            'Condition d'inversion
            If .NumberFormat = "mm/dd/yyyy" Then
               'Mémorise la date
               myDate = .Value
               'Transforme le type du format date
               .NumberFormat = "dd/mm/yyyy"
               'Transforme la date en inversant les valeurs du mois et du jour
               .Value = CDate(Month(myDate) & "/" & Day(myDate) & "/" & Year(myDate))
               If Month(.Value) <> Month(myDate) Then j = j + 1
            End If
         End With
      End If
   Next
   
   'Boîte de dialogue : nbre de dates corrigées sur nbre de cellules vérifiées
   Call MsgBox(vbCr & "Résultat du traitement :" & vbCr & vbCr & _
                  j & " date(s) corrigée(s) sur " & i & " cellule(s) sélectionnée(s)." & Space(6), vbInformation + vbOKOnly, _
                      " Fonction de correction du type date")
      
   Exit Sub
Except:
   'Boîte de dialogue : message d'erreur
   Call MsgBox(vbCr & "Erreur n° " & Err.Number & vbCr & vbCr & _
                       Err.Description & Space(6), vbCritical + vbOKOnly, " Fonction de correction du type date")
End Sub
-----------------------------------------------------------------------------------------

 Conclusion

catégorie : VBA Excel
voir la capture d'écran pour comprend le type d'anomalie


 Historique

23 mars 2006 14:32:52 :
Ajout d'un exemple (capture d'écran)
23 mars 2006 14:34:53 :
Ajout d'une capture d'écran en exemple d'anomalie
23 mars 2006 14:41:00 :
Correction faute de frappe
23 mars 2006 15:02:03 :
Côte de commentaire oubliée
23 mars 2006 18:58:54 :
Correction grammaticale
23 mars 2006 19:04:33 :
erreur de manip
29 mars 2006 11:43:21 :
Catégorie VBA
13 avril 2006 17:15:49 :
Corrections effectuées sur la plage de cellules sélectionnées (pas d'argument)
13 avril 2006 17:26:04 :
Rajout capture d'écran
14 avril 2006 17:17:20 :
Version 2 : ajout de boîtes de dialogue

 Sources du même auteur

Source avec une capture VBA EXCEL CONVERTIR EN NOMBRE, APPLIQUER UN FORMAT MONETAIRE...
Source avec une capture AFFICHER L'INTERFACE ODBC POUR CRÉER UNE SOURCE DE DONNÉE (D...
Source avec une capture VBA EXCEL : FONCTION ROUND POUR COMPATIBILITÉ EXCEL 97
Source avec Zip Source avec une capture CONTRÔLEUR NUMÉRIQUE DE SAISIE
Source avec Zip Source avec une capture GRADIENT ANIMÉ (BARRE DE PROGRESSION)

 Sources de la même categorie

Source avec Zip Source avec une capture OUTLOOK ATTACHEMENT SAVER par MoiLafouine
Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULS DE DATES À PARTIR D'UN CALENDRIER par jcbouli
Source avec Zip Source avec une capture FORMAT DE DATE SYSTEM ET PORTABILITÉ par pillsmen
Source avec Zip CALENDRIER SOUS VBA (EXCEL) par JM247L
CONVERTION DE CHAMP TEXTE EN DATE par pasco05
DATE DU JOUR par blq

Commentaires et avis

Commentaire de iridium le 26/05/2006 10:17:44

Un grand merci car aussi je rencontre ce problème et ce code va m'être bien utile

Commentaire de koaladv le 10/06/2006 23:55:14

Un grand merci de ma part egalement car ce code est très bien fait et surtout tres bien commenté.

Commentaire de FENETRES le 15/06/2006 10:12:12

C'était le but recherché. Comme tout le monde, j'ai profité des sources éditées sur Internet alors... il faut savoir renvoyer l'ascenseur et rendre service à son tour !

Commentaire de jacquito le 22/07/2006 19:44:07

Bravo et tres bien ecris

Commentaire de FENETRES le 17/01/2007 18:23:58

'Pour ceux qui souhaite récupérer le format déclaré dans les paramètres régionaux

Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long

Private Function getRegDateType() As String
'Retourne, pour l'utilisateur actuel, le type de date spécifié dans
'les paramètres régionaux du panneau de configuration de Windows.

   Const LOCALE_SSHORTDATE = &H1F

   Dim Symbol As String
   Dim RetVal1 As Long
   Dim RetVal2 As Long
   Dim lpLCDataVar As String
   Dim Pos As Integer
   Dim Locale As Long

   Locale = GetUserDefaultLCID()
   RetVal1 = GetLocaleInfo(Locale, LOCALE_SSHORTDATE, lpLCDataVar, 0)
   Symbol = String$(RetVal1, 0)
   RetVal2 = GetLocaleInfo(Locale, LOCALE_SSHORTDATE, Symbol, RetVal1)
   Pos = InStr(Symbol, Chr$(0))
   If Pos > 0 Then
      getRegDateType = LCase(Left$(Symbol, Pos - 1))
   End If
  
End Function

Commentaire de FENETRES le 15/02/2007 18:30:44

Autres problèmes liés à l'import de fichier :
Sur ce site, à l'adresse ci-dessous, vous trouverez le moyen de convertir en nombre une page de cellules sélectionnées ainsi que la possibilité d'appliquer un format monétaire ou de pourcentage.

http://www.vbfrance.com/codes/VBA-EXCEL-CONVERTIR-NOMBRE-APPLIQUER-FORMAT-MONETAIRE-OU_41270.aspx

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment mettre une date [ par nad ] je voudrais, au lancement d'une feuille de mon application que dans un textBox il se mette automatiquement la date du jour. Comment faire?J'aurais ens Date courante pour un nom de fichier [ par Ph.D ] Salut,Je souhaite créer des fichiers d'archives avec comme nom la date du jour de sauvegarde (ex : 20010909.arc), je sais récupérer la date, extraire date [ par wareg ] bonjourqu'elle est le code qui permet de calculer la différence entre deux dates au format jour, mois et année, sachant qu'il y a des text1, 2 et 3 po NOW - (1 mois silvouplé et pas 1 jour) [ par Misutsu ] Bah voilà, il me reste un petit truc à rectifier et je ne trouve pas comment.quand on fait : now - 1On obtient la date d'aujourd'hui moin Date au format: "Aug 2 08:40:14 2002" [ par jockos ] J'ai récupéré une date dans un fichier qui a le format suivant:"Aug 2 08:40:14 2002"Mon gros Problème, c'est le "Aug", qui designe évidemment le mois Problème d'insertion en colonnes dans une liste!!!!!!!!! [ par stagiaireiut ] Bonjour, je vais essayer d'être clair, j'ai un problème qui ne doit pas être très compliqué à résoudre, mais dont je ne parviens pas à trouver la soul type as DATE [ par sygale ] kk1 peut m'expliquer : ? format$(cdate(format(cdate("31/12/2999"),"DD/MM/YY")),"DD/MM/YYYY") = 31/12/1999 ??Moi je trouve pas ca logique du tout !!!Sy date : premier jour du mois [ par bbProg ] je cherche à savoir quel jour correspond à quelle date ( exemple le premier septembre 2001 était un samedi, un vendredi ? etc... )et j'avoue que je n format date et access???? [ par spiderone ] j'essaie de recuperer la date et heure actuelle et de la metter dans access mais y veut pas&gt;&gt;&gt; type incompatibledim tempDate as stringtempDat format de date [ par wholehog2 ] je suis sou vb.net et je n'arrive pas à mettre une date au format que je veux, c'est à dire "dd/mmmm/yyyy"il me dit ceci :Une exception non gérée du t


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales