IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

remplacer des "." par "/" ?.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut remplacer des "." par "/" ?.
    Bonjour,

    j'utilise le code suivant pour remplacer dans 4 colonnes contiguës les . par des / pour obtenir des dates.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    La modif se fait bien, mais certaines cellules ne prennent pas la forme de date. Alors que cette fonction marche en manuel.

    Une idée d'amélioration ?
    merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1, 1) = CDate(Replace(Cells(1, 1), ".", "/"))
    Bonne journée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    merci.
    Comment appliquer ce code à toutes les cellules de 4 colonnes (F à I) ?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    avec PremCol : "C" et DerCol : "F"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.screenUpdating = false
    For each Cell in Range("C" & Split(Activesheet.usedrange.address,"$")(4) & ":F" & Split(Activesheet.usedrange.address,"$")(4))
        if not isempty(Cell) then Cell = CDate(Replace(Cell, ".", "/"))
    Next
    Application.screenUpdating = True
    Pas testé. Tu peux le faire pour moi ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    Ouskel'n'or, ton code ne fonctionne pas, le bug est sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell = CDate(Replace(Cell, ".", "/"))

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    en fait je viens de comprendre que les cellules qui ne sont pas reconnues en dates sont celles qui ne commencent pas par 1 à 12 (format JJ/MM/AA). En VBA le format par défaut est anglo-saxon soit MM/JJ/AA, ce qui crée une erreur d'interprétation de format. Celles qui commence pas 1 à 12 c'est ok , aprés 12 ça bug.
    QQun a une solution pour ça ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    j'ai trouvé ça avec l'enregistreur de macro et la fonction "convertir", mais ce n'est pas trés light...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Columns("F:F").Select
        Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("G:G").Select
        Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("H:H").Select
        Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("I:I").Select
        Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    As-tu testé ma proposition ? Parce que chez moi, elle respecte bien le format... et tu n'en parles pas

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Autant pour moi . Si les dates sont saisies manuellement dans le format jj.mm.aaaa, (ce que j'avais fait la première fois) mon code fonctionnait. Si ils sont introduit par soft, alors là ça marche plus. Tandis qu'avec le code suivant, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
        Application.ScreenUpdating = False
        For Each Cell In Range("A1:A" & Split(ActiveSheet.UsedRange.Address, "$")(4))
            If Not IsEmpty(Trim(Cell)) Then Cell.Value = CDate(Replace(Trim(Cell), ".", "/"))
        Next
        Application.ScreenUpdating = True
    End Sub
    C'est le .Value qui manquait...
    Tu dis
    A+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    hummmm...non marche pas. Ton code march epour 1 colonne (A) ou plusieurs ?

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Le dernier code ? pour une seule. Suffit que tu remplaces
    For Each Cell In Range("A1:A" & Split(ActiveSheet.UsedRange.Address, "$")(4))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each Cell in Range("C" & Split(Activesheet.usedrange.address,"$")(4) & ":F" & Split(Activesheet.usedrange.address,"$")(4))
    en adaptant les colonnes (C et F)
    Tu dis

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    non désolé, c'est toujours sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then Cell.Value = CDate(Replace(Trim(Cell), ".", "/"))
    qu'il m'indique une erreur (surligné en jaune).

    Citation Envoyé par ouskel'n'or Voir le message
    Si ils sont introduit par soft, alors là ça marche plus. Tandis qu'avec le code suivant, ça fonctionne
    oui c'est le cas, c'est une extraction de données d'une base de données sur serveur.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pourrais-tu nous "dévoiler" comment tu as résolu ton problème ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    oui, en fait j'ai finalement gardé ma solution (décrite plus haut) qui consiste à utiliser la fonction "convertir". Ce code n'est pas clean mais il fonctionne. Le problème c'est qu'il faut une code par colonne...

    J'ai renoncé à utiliser ton code qui bug toujours sur l'instruction Cell.Value et je ne sais pas pourquoi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Columns("F:F").Select
        Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("G:G").Select
        Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("H:H").Select
        Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
     
            Columns("I:I").Select
        Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 4), TrailingMinusNumbers:=True
    merci de tes réponses.
    A+

    PS: je poste une nouvelle question sur les TCD...

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Just a question : Quelle version d'Excel utilises-tu ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    2003 SP3

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors je n'ai pas d'explication. Désolé.
    Mais rassure toi, "une bonne procédure est une procédure qui fait ce qu'on veut sans bug" Donc, utilise bien la tienne
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Turbo Pascal] Remplacer des lettres saisies par des points
    Par aristideman dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 11/03/2012, 19h10
  2. Remplacer des select imbriqués par une jointure
    Par comode dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/11/2011, 14h01
  3. remplacer des inputs text par des selects
    Par patricx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/05/2011, 14h00
  4. Réponses: 3
    Dernier message: 09/12/2010, 13h38
  5. [PHP 5.2] Remplacer des balises html par des balises encodées
    Par gtraxx dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2009, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo