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 macro pour rechercher/remplacer [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Problème macro pour rechercher/remplacer
    Bonjour,
    Apès plusieurs essais j'arrive pas à trouver une solution pertinente pour mon problème. En effet, pour certains codes qui commencent avec APR et AUG m'affiche à chaque fois le code sous format d'une date, c'est à dire qu'il considère AUG et APR comme étant des mois, j'ai réussi à résoudre le problème de façon manuelle en recherchant et remplaçant les *04/ par 'APR et les *08/ par 'AUG, en parallèle j'ai enregistrer une macro qui permet d'automatiser la tâche mais malheureusement elle ne marche que pour le fichier, et j'aimerais savoir s'il y un moyen de trouver une macro qui marche pour n'importe quel fichier.

    Le code de ma macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro3()
    '
    ' Macro3 Macro
    '
     
    '
        Selection.Replace What:="*04/", Replacement:="'APR", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Selection.Replace What:="*08/", Replacement:="'AUG", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End Sub
    Merci pour votre retour.
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Faicel.93 Voir le message
    pour certains codes qui commencent avec APR et AUG m'affiche à chaque fois le code sous format d'une date, c'est à dire qu'il considère AUG et APR comme étant des mois, j'ai réussi à résoudre le problème de façon manuelle en recherchant et remplaçant les *04/ par 'APR et les *08/ par 'AUG
    Il y a une solution beaucoup plus simple : mets tes cellules au format Texte.
    Sélectionne l'ensemble des cellules concernées > Clic droit > Format de cellule > Onglet Nombre > Catégorie Texte.
    Excel n'interprètera plus les données que tu mets dans ces cellules et les laissera telles que tu les as saisies.

    D'une manière générale, tous les codes (téléphonique, postal, bancaire, etc.) devraient être dans des cellules au format Texte.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse.
    Malheureusement, la solution que tu m'as proposée ne marche pas.
    Voilà ce que ça donne alors que moi, je veux qu'il m'affiche pour la première cellule par exemple AUG6198.
    Merci.
    Nom : Untitled2.png
Affichages : 416
Taille : 6,9 Ko

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Faicel.93 Voir le message
    la solution que tu m'as proposée ne marche pas.
    Elle marche à condition d'être appliquée AVANT la saisie.
    Essaye de mettre une cellule au format Texte et de taper un de tes codes, tu constateras qu'il reste tel que tu le tapes.

    Pour des données déjà saisies et donc déjà transformées, on ne peut plus l'appliquée cette méthode puisque le mal est déjà fait.
    Ce serait comme mettre un répulsif anti-moustique après avoir été piqué : ce n'est pas ça qui empêche le bouton de gratter.

    Pour les données déjà saisies, il faudrait que tu les transforme à l'aide d'une fonction TEXTE.
    https://support.office.com/fr-FR/art...8-93d29371225c

    Tu mets tes données et une colonne vide au format Texte (cf mon précédent message)
    Dans la colonne vide, avec une fonction TEXTE, remets-les au format souhaité (ce sera sans doute quelque chose comme TEXTE(A1;"mm/aaaa") )
    Tu sélectionnes les cellules de la nouvelle colonne > Ctrl+C
    Tu sélectionnes les cellules de tes données > Clic droit > Copier Valeur
    Tu supprimes la colonne contenant les fonctions TEXTE.

    Ca devrait remettre tes données d'aplomb.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Voici une illustration de l'importance de bien definir la propriete Numberformat avant d'ecrire une valeur dans une cellule a partir de VBA.

    En B2, le resultat est exact car on ecrit dans une cellule dont le format est TEXTE une valeur de type String. (APR6198)

    En B10, le resultat est faux car on ecrit dans une cellule dont le format est TEXTE une valeur de type DATE. (01/04/6198)


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    Sub main()
    Cells.Clear
     
    Call CreerUneValeurDeTypeDate
    Call EcrireAvecValue
    Call EcrireAvecFormulaLocal
     
    InsererLignes
     
    Call CreerUneValeurDeTypeTexte
    Call EcrireAvecValue
    Call EcrireAvecFormulaLocal
     
    Columns("A:D").Columns.AutoFit
    End Sub
     
    Sub EcrireAvecValue()
    lig = 1
    Set r = Cells(lig, 1)
     
    t = r.Value
     
    Set r = Cells(lig + 1, 2)
    r.NumberFormat = "@"
    r.Value = t
     
    Set r = Cells(lig + 1, 3)
    r.NumberFormat = "m/d/yyyy"
    r.Value = t
     
    Set r = Cells(lig + 1, 4)
    r.NumberFormat = ""
    r.Value = t
     
    End Sub
     
    Sub EcrireAvecFormulaLocal()
    lig = 1
    Set r = Cells(lig, 1)
     
    t = r.Value
     
    Set r = Cells(lig + 5, 2)
    r.NumberFormat = "@"
    r.FormulaLocal = t
     
    Set r = Cells(lig + 5, 3)
    r.NumberFormat = "m/d/yyyy"
    r.FormulaLocal = t
     
    Set r = Cells(lig + 5, 4)
    r.NumberFormat = ""
    r.FormulaLocal = t
     
    End Sub
     
     
    Sub CreerUneValeurDeTypeTexte()
    lig = 1
    Cells(lig, 1).NumberFormat = "@"
    Cells(lig, 1).Value = "APR6198" 'ceci est une date de type String
     
    Call Infos
     
    End Sub
     
    Sub CreerUneValeurDeTypeDate()
     
    Cells(1, 1).NumberFormat = ""
    Cells(1, 1) = CDate("1/04/6198") 'ceci est une date de type Date
    Infos
     
    End Sub
     
    Sub Infos()
    Range("$A$2") = "cell.Value = "
    Range("$A$4") = "cell.Numberformat = "
    Range("$A$6") = "cell.FormulaLocal = "
    Range("$b$4") = "@"
    Range("$c$4") = "m/d/yyyy"
    Range("$d$4") = "General"
    End Sub
     
    Sub InsererLignes()
        Rows("1:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End Sub
    Cordialement

    Docmarti.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Explication:

    avr2020 est un format de date reconnu par Excel quand on l'entre manuellement sur une feuille Excel si la langue definie dans le Panneau de configuration est Francais (France). Mais les fonctions IsDate et CDate dans VBA ne reconnaissent pas avr2020 comme etant une date.

    apr6198 est un format de date reconnu par Excel quand on l'entre manuellement sur une feuille Excel si la langue definie dans le Panneau de configuration est Anglais (Etats-Unis). Mais les fonctions IsDate et CDate dans VBA ne reconnaissent pas apr6198 comme etant une date.

    Pourtant, qu'importe la langue definie dans le Panneau de configuration, il arrive que VBA transforme apr6198 en 4/1/6198 ou en 1569905 quand on entre une commande telle que cells(1,1).value = "apr6198"?

    Mais cette conversion de la valeur String "apr6198" en 4/1/6198 ou en 1569905 s'effectue uniquement si la propriete Numberformat de la cellule n'est pas TEXTE.

    Donc, on peut supposer qu'il existe dans VBA une fonction de conversion qui est appelee chaque fois qu'on veut ecrire une valeur dans une cellule a partir de VBA et que cette fonction de conversion effectue sa conversion uniquement lorsque le type de la valeur et la propriete Numberformat de la cellule sont differents. Et que, de plus, cette fonction de conversion ne reconnait que les formats de dates americains quelle que soit la langue choisie dans le Panneau de configuration.

    Cette fonction a peut-etre une utilite pour ceux qui parlent americain, mais pour les autres, elle est plutot embetante car elle transforme 01/04/2011 en 4/1/2011. Quand elle transforme apr2012 en 4/1/2012, les Americains eux-memes doivent etre embetes.
    Cordialement

    Docmarti.

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

Discussions similaires

  1. Macro automatique pour rechercher/remplacer
    Par Flaguette dans le forum VBA Word
    Réponses: 16
    Dernier message: 13/05/2020, 13h32
  2. Réponses: 4
    Dernier message: 09/12/2016, 22h58
  3. [WD-2003] Macro pour rechercher et remplacer sur table Index
    Par milia123 dans le forum VBA Word
    Réponses: 0
    Dernier message: 12/01/2013, 15h02
  4. macro vba pour rechercher/remplacer
    Par amadou78 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/02/2010, 17h38
  5. Macro de recherche/remplace automatique
    Par phil011 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/08/2007, 11h00

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