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 :

Problème de rédaction pour une conversion de dates [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut Problème de rédaction pour une conversion de dates
    Bonjour à tous,

    Ayant parcouru le forum à la recherche d'une solution à mon problème qui est de convertir des dates anglo-saxonnes en dates française, j'ai trouvé le moyen de le faire en passant par:
    Données>Convertir puis en changeant au format MJA à l'étape 3.
    Cela fonctionne lorsque j'effectue la manipulation manuellement. Seulement ce qui m'intéresse, c'est de le faire par macro sur un certain nombre de colonnes.
    Toutefois, lorsque j'utilise l'enregistreur de macro, excel m'écrit cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
    '
    ' Macro1 Macro
        Columns("G:G").Select
        Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 3), TrailingMinusNumbers:=True
    End Sub
    Le soucis, est que lorsque je lance la macro pour le faire sur une autre colonne, cela ne fonctionne pas. Pourriez-vous m'aider sur la syntaxe à adopter pour que cela fonctionne?

    Bien cordialement,
    Vbamateur.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    modifier ça : Columns("G:G").Select
    par par exemple : Columns("G:K").Select
    je crois que ca va fonctionner
    amicalement

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    Tout d'abord, merci pour ta réponse rapide.
    Le soucis c'est que l'on ne peut pas traiter plusieurs colonnes en une seule fois mais à la rigueur ce détail n'est pas si grave.
    Le vrai problème c'est que la conversion ne s'effectue pas quand je lance la macro à l'inverse de lorsque je le fais "à la main".

    Bien cordialement,
    Vbamateur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    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
     
    Sub test()
    DateFrGb Columns("G:G")
    DateFrGb Columns("F:F")
    For i=1 to 10
      DateFrGb Columns(i)
     
    Next
     
    End sub
     
    Sub DateFrGb(plage as range)
    '
    ' Macro1 Macro
     
        plage.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 3), TrailingMinusNumbers:=True
    End Sub

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je dis peut être une bêtise (vous avez l'habitude), mais faut pas modifier ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited
    pour dynamiser "G1" en fonction de la colonne de plage, comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage.TextToColumns Destination:=plage.Cells(1,1), DataType:=xlDelimited

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir Joe,
    Si tu as raison, un copier coller intempestif, merci pour la correction!

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    Bonjour à vous et merci pour vos réponses.
    Lorsque je vous lis, tout me semble clair et devrait fonctionner pourtant les macros ne fonctionnent pas et je ne comprends pas pourquoi... Je joins un fichier pour être plus clair. Les macros données précédemment y figurent.

    Merci d'avance,

    Vbamateur.
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voici tes procédures :

    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
    Sub test()
    DateFrGb Columns("G:G")
    DateFrGb Columns("H:H")
     
    For i = 1 To 10
      DateFrGb Columns(i)
    Next
     
    End Sub
     
    Sub DateFrGb(plage As Range)
     
     
    ' Macro1 Macro
        plage.TextToColumns Destination:=plage.Cells(1, 1), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 3), TrailingMinusNumbers:=True
     
    End Sub

    Déjà, les deux premiers appels sur la colonne G et H ne sont pas utile car tu introduits une boucle qui va faire le travail sur les 10 premières colonnes (donc G et H seront inclus).


    Le problème .... c'est que tes premières colonnes sont vides ! Donc la méthode TextToColumns échoue forcément.

    il y a des tonnes de manières de régler ça, j'ai opté pour une identification des colonnes vides via le comptage des cellules remplies (formule CountA = NBVAL)


    cette ligne est à insérer dans ta procédure DateFrGb avant l'utilisation de TextToColumns :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.CountA(plage) = 0 Then Exit Sub

  9. #9
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    Tout d'abord, merci pour ta réponse car je ne connaissais pas le "COUNTA(plage)"
    Mon code est donc

    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
    Sub test()
    Application.Screenupdating=False 
     
     
    For i = 7 To 13
      DateFrGb Columns(i)
    Next
     
    End Sub
     
    Sub DateFrGb(plage As Range)
     
    If Application.WorksheetFunction.CountA(plage) = 0 Then Exit Sub
     
        plage.TextToColumns Destination:=plage.Cells(1, 1), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 3), TrailingMinusNumbers:=True
     
    End Sub

    Etant donné que mes colonnes commencent toujours à la 7e, il n'y a plus de soucis et le countA permet de stopper la procédure dès qu'il y a une colonne vide. La dessus, on est bon. Le problème est que justement, la conversion ne s'effectue toujours pas à l'inverse de lorsque je le fais manuelle avec données puis convertir... C'est frustrant d'avoir la réponse écrite et cela ne fonctionne pas. J'oublie forcément quelque chose mais je ne vois vraiment pas quoi. (Par exemple, dans le fichier, je voudrais que les "05/01/2015" se transforment en "01/05/2015" et que, naturellement, il passe bien d'un 5 janvier à un 1er mai.

    Bien cordialement,

    Vbamateur.

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Peut être qu'on peut procéder autrement.

    Dans la mesure où la date (du point de vue de Excel), c'est juste un numéro de série, on doit donc modifier le format de cellule

    voici un exemple à adapter.

    Un fonction qui inverse le format de date
    Dans mon exemple, l'appel est effectué sur la selection des cellules de la feuille active, à adapter

    Si sur la plage, il y a différents formats de date alors :

    1) c'est la première cellule de la plage qui est une référence
    2) si elle est au format français : tout le monde revient au format anglais (et inversement)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub io()
    Call InverseFormatDate(Selection)
    End Sub
     
    Sub InverseFormatDate(Plage As Range)
    Const FormatFrancais As String = "dd/mm/yyyy"
    Const FormatAnglais As String = "mm/dd/yyyy"
        With Plage
            If .NumberFormat = FormatFrancais Then .NumberFormat = FormatAnglais Else .NumberFormat = FormatFrancais
        End With
    End Sub

  11. #11
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    C'est vrai que c'est une idée qui se tient car l'inversion se fait "graphiquement" cependant, la valeur même de la cellule reste le 5 janvier. C'est ça qui est problématique et c'est pour ça que la manip Données>Convertir> MJA était l'idéal mais malheureusement, je n'arrive pas à l'automatiser par macro.

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    tu es sûr que ce sont bien des dates et pas du texte ? Les dates "dates" sont écrites avec un alignement à droite. Quand c'est du texte c'est un alignement à gauche



    j'ai pas eu de problème pour inverser les dates sur mes tests

  13. #13
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    Et bien je crois qu'elle sont toutes au format date justement :/

  14. #14
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2015
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 48
    Par défaut
    A force de tripatouiller, on finit par trouver ce qu'on cherchait.
    Pour ceux qui souhaite utiliser le code par la suite, voila celui qui fonctionne pour moi.

    Merci à tous,
    Bien cordialement,
    Vbamateur


    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
     
    Sub test()
     
    For i = 7 To 13
      DateFrGb Columns(i)
    Next
     
    End Sub
     
    Sub DateFrGb(Plage As Range)
     
     
     
     
    If Application.WorksheetFunction.CountA(Plage) = 0 Then Exit Sub
        Plage.TextToColumns Destination:=Plage.Cells(1, i), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 3), TrailingMinusNumbers:=True
     
     
     
    End Sub

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

Discussions similaires

  1. problème sur une macro pour une conversion en VB6.3
    Par Zoldick dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 14h41
  2. Réponses: 3
    Dernier message: 06/12/2006, 10h01
  3. [Smarty] Problème de header pour une redirection de page
    Par soda_o_rat dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/08/2006, 09h58
  4. [MySQL] Problème de tri pour une application
    Par nanor21 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 11/05/2006, 19h08
  5. Problème de contrainte sur une partie de date (l'année)
    Par shefla dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/04/2006, 21h50

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