Problème pour remplacer des "." par "" en boucle

Bonjour à tous

Je travail sur une base de donnée contenant des dates importés d'une source internet.

Suite à l'importation, plusieurs des dates s'affiche à un formats du type "avr.-13" pour la date 01/04/2013.

Cependant, excel ne reconnait pas ce format de date (il reconnait plutôt un format "avr-13", c'est à dire le même du dessus mais le "." en moins).

Mon objectif est de pouvoir changer le format des dates du type "avr.-13" en "avr-13" et ce sur 16 feuilles d'un même classeur.

Je me suis donc dit qu'en remplaçant les "." par "" avec une fonction replace pourrait faire l'affaire (dans une double boucle, une boucle pour les feuilles et l'autre pour les lignes).

En visitant le forum je me suis inspiré d'un code pour faire celui-ci:

Dim i, j As Integer
Dim n As Integer

For j = 1 To 16

n = ThisWorkbook.Worksheets(j).Cells(Rows.Count, 8).End(xlUp).Row

    For i = 15 To n

    ThisWorkbook.Worksheets(j).Cells(i, 8) = Replace(ThisWorkbook.Worksheets(j).Cells(i, 8).Value, ".", "")

    Next i

Next j

La macro tourne mais sans modifier les "." en "" et lorsque j'essaye la même chose mais pour une feuille:

Dim i, j As Integer
Dim n As Integer

n = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 8).End(xlUp).Row

    For i = 15 To n

    ThisWorkbook.Worksheets(1).Cells(i, 8) = Replace(ThisWorkbook.Worksheets(1).Cells(i, 8).Value, ".", "")

    Next i

Next j

Le code fonctionne lorsque il y a bien un "." qui traîne dans la date, mais quand la date est au bon format (i.e type "avr-13") ils se trouvent tous remplacer par "janv-13".

J'ai remarqué qu’en-fait il convertit les dates noté par exemple comme 01/12/2013 pour être affichés "déc-13" en 12/01/2013 pour être à la suite affiché "janv-13".

Ceci est surement du au faite que vba communique en anglais et donc inverse les jours avec les mois comme sont présenté les date en anglais.

Du coup, comment dire au compilateur de ne pas changer le format, i.e de ne pas passer d'un format français à anglais?

PS: les dates sont à la 8ième colonne de chaque feuilles. Je vais préparer un document excel à télécharger pour présenter le problème.

Merci à tous de votre attention

Bonsoir,

Veux-tu nous donner un exemple de fichier ?

41exemple.xlsm (15.53 Ko)

J'ai fait un petit exemple vraiment simplet pour essayer d'illustrer au mieux.

Bonjour,

utilise cdate(ta_date) pour éviter ce problème d'interprétation des dates en anglais.

eric

Comme il s'agit de plusieurs cellules, peut on avec cdate() y introduire une plage comme objet (ou une succession de cellules dans une boucle)

Dans le style:

Dim n,i as Integer
Dim s as string
n = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 to n

s=CDate(ThisWorkbook.Worksheets(1).Cells(i,2).value)

Next i

Bonjour,

Ça marche à merveille, merci mille fois!

Cependant, le code (supprimant les "."), fonctionne bien pour une feuille, j'ai tenté de l'introduire dans une boucle pour les trois autres mais sans succès.

Pensez vous qu'il y ait un moyens de procéder ainsi

Bonjour,

J'ai encore un petit souci assez agaçant,

en fait je réussi bien à supprimer les "." de chaque date sur chaque feuilles.

Cependant, textuellement sur Excel, on passe par exemple de l'écriture "avr.-13" à "avr-13" sans que le tableur le reconnaisse comme le 01/04/2013.

J'ai remarqué qu'en sélectionnant le texte de l'une des cellules ayant ce problème, pour ensuite appuyer sur "Entrée" permettait à Excel de reconnaître le caractère "avr-13" en 01/04/2013.

Malheureusement, je n'arrive pas trouver une procédure pouvant répéter cette action sur chaque lignes quelque soit le mois (i.e "mai-13" pour 01/03/2013, "juin-13" pour 01/04/2013, etc...)

Avec l'aide de l'enregistreur de macro, j'ai tenté ceci:

Dim n,i as Integer

n = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row

For i = 1 To n
ThisWorkbook.Worksheets(1).Cells(i, 2).Select
ActiveCell.FormulaR1C1 = ThisWorkbook.Worksheets(1).Cells(i, 2).Value
Next i

Mais cela n'a rien changé.

Idem si j'essaye ceci:

Dim i,n as Integer
Dim s,d as String

n = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row

s= "avr-13"
d=CDate(s)

Merci grandement de votre aide

essaie avec ça :

Sub corrigeDate()
    Dim lig As Long, derlig As Long
    derlig = Cells(Rows.Count, "B").End(xlUp).Row
    For lig = 2 To derlig
        If IsDate(Cells(lig, "B")) Then Cells(lig, "B") = CDate(Replace(Cells(lig, "B"), ".", ""))
    Next lig
End Sub

eric

Bonjour,

Merci énormément, ça fonctionne à merveille!

Je me suis juste permis de le remodeler de sorte à ce que la procédure s'applique sur chaque feuilles:

Sub corrigeDate()
    Dim lig, k As Long, derlig As Long
    derlig = Cells(Rows.Count, "B").End(xlUp).Row

For k = 1 To Worksheets.Count

    For lig = 2 To derlig
        If IsDate(Worksheets(k).Cells(lig, "B")) Then Worksheets(k).Cells(lig, "B") = CDate(Replace(Worksheets(k).Cells(lig, "B"), ".", ""))
    Next lig

Next k
End Sub

Bonjour

J'ai cherché une solution aussi pour le plaisir

Mais des actions faites manuellement , enregistrées dans une macro, ne fonctionnent pas lorsque l'on exécute que la macro

Juste par curiosité à essayer

Sub test()
'objectif: supprimer les "." qui peut y avoir dans les dates de chaque feuilles
'essaye pour supprimer les "." sur les trois feuilles
Dim I As Integer
Dim nblg As Long

  For I = 1 To 3
    With Sheets(I)
      nblg = .Range("B" & Rows.Count).End(xlUp).Row
      With Range("B2:B" & nblg)
        .Replace what:=".", replacement:="", lookat:=xlPart
        .Offset(0, 2).Formula = "=RC[-2]*1"
        .Offset(0, 2).Copy
        .PasteSpecial Paste:=xlPasteValues
        .Offset(0, 2).ClearContents
        .NumberFormat = "mmm-yy"
      End With
    End With
  Next I
End Sub

Le code est quasi parfait,

Seule imperfection que j'ai pu remarquer est que le tableur affiche le mois de septembre en année 2013 systématiquement

Je l'ai marqué en orange sur le fichier joint si vous voulais bien jeter un coup d’œil.

J'avais mi de côté le projet pensant qu'il été bon, mais en fait non

Bonjour

J'ai constaté le problème, on pourrait (peut-être) le corriger mais comme tu as une version qui fonctionne (celle D' eriiic) ce n'est pas la peine de chercher

J'avais fait ça juste pour le fun, je me suis planté, tant pis

J'essaierai de faire mieux la prochaine fois

Bonjour,

Ce que tu as en A n'est pas une date complète, mais juste mois-année, sans jour.

sept.-14 est interprété comme 14/09 de l'année courante.

Quand on dit de toujours joindre un fichier...

Ajoute 1- devant ta date :

Sub macro1()
    Dim lig, k As Long, derlig As Long
    derlig = Cells(Rows.Count, "B").End(xlUp).Row
    For k = 1 To Worksheets.Count
        For lig = 1 To derlig
            If IsDate(Worksheets(k).Cells(lig, "A")) Then Worksheets(k).Cells(lig, "B") = CDate(Replace("1-" & Worksheets(k).Cells(lig, "A"), ".", ""))
        Next lig
    Next k
End Sub

Merci à toi Eric,

Juste quand je reprends ton code, le compilateur m'indique une erreur de syntaxe que je n'arrive pas à retrouver

Bonjour

J'avais voulu mettre en couleur la partie modifiée, mais les balises se sont intégrées dans le code.

Re-essaie.

eric

Merci mille fois!

Ça fonctionne parfaitement

Sur le fichier joint le code marche à merveille, cependant sur la base de donnée sur laquelle je travail, le compilateur corrige correctement les dates de la première feuille mais ensuite celui-ci indique une erreur d'incompatibilité de type tel que k=1 et lig=16 (car c'est à la 16ième ligne que commence la liste des dates en colonne H). J'ai repris ton code en changeant juste la colonne à laquelle on affecte les corrections:

Sub macro6()
    Dim lig, k As Long, derlig As Long
    derlig = Cells(Rows.Count, "H").End(xlUp).Row
    For k = 1 To Worksheets.Count - 4
        For lig = 1 To derlig
            If IsDate(Worksheets(k).Cells(lig, "H")) Then Worksheets(k).Cells(lig, "H") = CDate(Replace("1-" & Worksheets(k).Cells(lig, "H"), ".", ""))
        Next lig
    Next k
End Sub

En notant qu'avec ton ancien code:

If IsDate(Worksheets(k).Cells(lig, "H")) Then Worksheets(k).Cells(lig, "H") = CDate(Replace(Worksheets(k).Cells(lig, "H"), ".", ""))

Le compilateur n'indiquait pas d'erreur , cela me semble bizarre

Si tu le dis, ça doit être vrai, c'est toi qui as le fichier sous les yeux...

J'ai ajouté dans le fichier joint les dates de la première feuille de la base de donnée en feuille 2.

En lançant la macro, le compilateur fonctionne pour la première feuille mais indique l’erreur de compatibilité de type en feuille deux.

Je suis pas sûre mais peut être que cela vienne du fait qu'il y ait des dates qui n'ont pas besoins d'être corrigées en feuille 2 (c'est à dire qu'ils sont au bon format => lien avec incompatibilité de type?)

Re,

à tester :

Sub macro6()
    Dim lig, k As Long, derlig As Long
    derlig = Cells(Rows.Count, "A").End(xlUp).Row
    For k = 1 To Worksheets.Count
        For lig = 1 To derlig
            If IsDate(Worksheets(k).Cells(lig, "A")) Then
                Worksheets(k).Cells(lig, "B") = CDate(Replace("1-" & Worksheets(k).Cells(lig, "A").Text, ".", ""))
            End If
        Next lig
    Next k
End Sub

eric

Merveilleux! Merci énormément

J'espère néanmoins ne pas avoir trop abusé de ta gentillesse

Rechercher des sujets similaires à "probleme remplacer boucle"