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 fonction recherche / remplacer sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Je rencontre des problèmes de format date durant l'évolution d'une macro...

    Le fait de remplacer un caractère dans une cellule permet la mise au bon format. (problème connu)

    Ma macro est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub Rempl()
    Dim feuil As Worksheet
    For Each feuil In ThisWorkbook.Worksheets
        feuil.Cells.Replace What:="/", Replacement:="/"
    Next feuil
    End Sub
    Mon problème est le suivant :

    Via la macro, toutes le remplacement ne fonctionne pas pour toutes les cellules... Par contre, si je le fais manuellement, cela fonctionne...


    Pourquoi cela fonctionne manuellement et pas par la macro ?!

    Merci de votre aide

    Bon app' :p

    Ce sujet à déjà été discuté sur un autre topic...

    Citation Envoyé par aalex_38 Voir le message
    Bonjour,


    Dans ton exemple tu ne précise pas si on fait la recherche sur tout le contenu de la cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub Rempl()
    Dim feuil As Worksheet
    For Each feuil In ThisWorkbook.Worksheets
        feuil.Cells.Replace What:="/", Replacement:="/", LookAt:=xlPart
    Next feuil
    End Sub

    As-tu essayé le recorder VBA ?
    J'ai également essayer avec le recorder, il veut rien savoir v_v

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Re,

    As-tu essayé avec le code que je t'ai donné ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Lu Alex...

    Je ne vois pas de quel code tu veux parler... (je suis pourtant allé voir mes ancien post v_v)

    EDIT : Ah pardon, tu parle du lookAt :p

    Oui, je crois avoir testé et je n'es pas eu plus de succès v_v

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Tu peux joindre un fichier en exemple ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Pas de problème... Mais je suis déjà actuellement sur un autre sujet

    C'est aussi pour cela que je rame... j'ai trop de programme en cours de réalisation v_v

    Voici un fichier test...

    Vous y verez des formats correctes et non correctes... Si vous lancer la macro en cliquant sur màj, les formats ne changent pas (voir macro pour détail) mais si vous faites un ctrl + H et remplacer "/" par "/" tous les formats deviennent correctes v_v

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    C'est vrai je n'ai pas trouvé de solution aujourd'hui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ' => CTRL + H  manuel OK
    ' => F2 OK
    ' => Calculer maintenant : KO
    ActiveSheet.EnableCalculation = True 'KO
    Calculate 'KO

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Malgré un essai avec la fonction suivante, je rencontre toujorus le même problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub essai1()
     
    Dim i, j As Variant
     
    For i = 13 To 10000
        For j = 2 To 7
     
    Cells(i, j).Value = format(Cells(i, j).Value, "dd/mm/yyyy")
     
        Next j
    Next i
    End Sub


    PS : je n'arrive pas à utiliser la fonction CDate malgrés mes recherches...
    Quelqu'un peut me faire un bout de code pour son utilisation ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Points : 484
    Points
    484
    Par défaut
    Bonjour DVano,

    Comment as-tu alimenté les dates dans tes cellules ?

    Si elles proviennent de chaines de texte, il aurait fallu les transformer au format date AVANT de les mettre dans tes cellules. La fonction DateSerial est utile dans ce cas. Exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tblDate = Split(DateTexteJJMMAAAA, "/")
    maCellule.Value = DateSerial(tblDate(2), tblDate(1), tblDate(0))
    Si tu as la main sur l'alimentation de ta feuille, c'est ce que je te conseille de faire, comme ça, tu es sûr que VBA interprètera correctement tes dates jj/mm/aaaa, car sinon, il essaie de les prendre par défaut au format mm/dd/yyyy.

    Si tu n'as plus la main sur l'alimentation de ta feuille, il faut rattraper le coup, en tenant compte du fait que lors de l'alimentation des données, les dates ont été interprétées par VBA au format mm/dd/yyyy lorsque c'était possible alors que le format était jj/mm/aaaa.
    Ton fichier contient donc actuellement :
    - des dates incorrectes (par exemple 02/12/2009 au lieu de 12/02/2009) car lorsque jj est inférieur ou égal à 12, il a été considéré comme le mois !
    - des valeurs que VBA n'a pas considéré comme des dates (par exemple 23/01/2009) car jj est supérieur à 12 et n'est pas reconnu comme un numéro de mois correct ! (et VBA ne considérera jamais ces valeurs comme des dates tant que tu ne les auras pas validées comme des dates via Excel en faisant un remplacement de "/" par "/").

    Exemple de code, basé sur ton fichier joint, qui permet de remettre les dates comme il faut (à n'utiliser qu'une fois)
    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
    Sub Essai2()
    Dim maCellule As Range, tblDate
    With ThisWorkbook.Worksheets(1).Range("B12").CurrentRegion
        For Each maCellule In .Cells
            If IsDate(maCellule.Value) Then
                tblDate = Split(maCellule.Value, "/")
                If tblDate(0) <= 12 Then
                    'date mm/dd/yyyy ==> jj/mm/aaaa
                    maCellule.Value = DateSerial(tblDate(2), tblDate(0), tblDate(1))
                Else
                    'on force les valeurs 'jj/mm/aaaa' dont jj > 12 au format date
                    maCellule.Value = DateSerial(tblDate(2), tblDate(1), tblDate(0))
                End If
            End If
        Next
    End With
    End Sub
    En résumé, il faut éviter de laisser VBA deviner tout seul le format des données que l'on récupère à l'extérieur d'Excel, surtout quand on a affaire à des dates ou des nombres (problèmes de '.' et de ',').

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Je parts effectivement d'un fichier texte où les dates sont au formats yyyymmdd...

    Je vais essayer de mettre en application tous tes conseils

    Merci

    EDIT:
    j'adore ce truc ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblDate = Split(DateTexteJJMMAAAA, "/")

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Finalement, dans ma macro, au moment où je souhaite faire ce remplacement, je créé un bogage, je fais mon remplacement manuellement et relance la macro à la ligne suivante...



    C'est donc pas résolu mais aujourd'hui, cela fonctionne de la sorte...

Discussions similaires

  1. Problème fonction recherche
    Par derech dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/10/2007, 11h35
  2. Problème fonction recherche..
    Par Lutine dans le forum VB.NET
    Réponses: 13
    Dernier message: 23/07/2007, 14h30
  3. comment automatiser la fonction rechercher/remplacer ?
    Par tristan_sauvage dans le forum Access
    Réponses: 4
    Dernier message: 28/12/2006, 17h05
  4. Comment faire une recherche/remplacement sous Linux
    Par fabszn dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/02/2006, 16h38
  5. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53

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