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 dans Selection.Replace avec la portee LookAt:=xlPart [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut problème dans Selection.Replace avec la portee LookAt:=xlPart
    Bonjour,

    Bien que dans ma macro je précise les paramètres de remplacement, à l'exécution, c'est le parametrage de la boite de dialogue qui a été conservé.

    Comment être sûr de la portée.
    question subsidiaire pour ne pas perturber l'utilisateur, comment capturer l'état de la box avant le remplacement et le remettre en place après ?

    La fonction est décrite par microsoft, ou il est bien dit que le code change la valeur de la box de dialogue.
    https://msdn.microsoft.com/fr-fr/lib.../ff194086.aspx

    Mon code:
    Dans mon cas, la macro a remplacé tous les "." de mon classeur par des "/", car j'avais fait manuellement un remplacer sur le classeur précédemment, alors que je l'attendais sur la colonne S (sans le titre d'ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Range("s2").Select
        Range(Selection, Selection.End(xlDown)).Select
            Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
    merci pour vos conseils
    Denis

  2. #2
    Expert éminent 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
    Par défaut
    Perso, je ne suis pas fan des Select. Tant qu'on peut les éviter...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("S2:S" & Range("S2").End(xlDown).Row).Replace What:=".", Replacement:="/", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

  3. #3
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci Menhir,

    mais le fait de sélectionner un range ne change rien.

    Même avec la selection en range, si tu as au préalable fait un remplacer sur classeur dans la boite de dialogue utilisateur chercher remplacer, la macro remplace toutes les valeurs
    sans tenir compte de l'attribut LookAt:=xlPart.

    par contre si on ferme Excel et qu'on le rouvre l'étendue du remplacer repasse sur feuille par défaut.

    Extrait de l'explication micro soft en lien ci dessus
    Les paramètres des arguments LookAt, SearchOrder, MatchCase et MatchByte sont enregistrés à chaque fois que vous utilisez cette méthode. Si vous n’indiquez aucune valeur la fois suivante, ce sont les valeurs enregistrées qui sont utilisées. Le fait de donner une valeur à ces arguments modifie les paramètres de la boîte de dialogue Rechercher. De même, modifier les paramètres de la boîte de dialogue Rechercher modifie les valeurs enregistrées qui sont retenues lorsque vous omettez les arguments. Pour éviter toute ambiguïté, donnez des valeurs à ces arguments à chaque utilisation de la méthode.
    Etonnant, en utilisant l'enregistreur de macro, le fait de prendre en compte l'option "feuille" ou "classeur" n'affecte pas l'attribut LookAt qui reste dans les deux cas en Xlpart.

    pouvez vous faire le test sur votre excel ?
    (petite erreur, je suis en 2010 et pas en 2007, mais je ne pense pas que cela ait une influence.)
    Denis

  4. #4
    Expert éminent 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
    Par défaut
    Citation Envoyé par Denis_67 Voir le message
    la macro remplace toutes les valeurs sans tenir compte de l'attribut LookAt:=xlPart.
    L'option LookAt n'influence pas la zone de recherche.
    Elle définit simplement si, pour chaque cellule, Excel recherche une correspondance avec la totalité de la cellule ou peut se contenter d'une correspondance avec une partie du contenu.

  5. #5
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Tu as raison Menhir, le Xlpart correspont bien à la cellule.

    Bon j'ai trouvé un article qui confirme mon problème et donne une solution
    Il faut désactiver le mode classeur par une recherche bidon pour réinitialiser le mode feuille.

    https://www.curuba.fr/index.php/astu...lasseur-entier
    Il n'y a pas de date ni de version d'Excel, mais en tout cas ça marche en 2010.

    Mon code devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test_remplace()
    Dim Z_Reset As Range
    Set Z_Reset = Worksheets(1).Range("A1:A1").Find("Reset", LookIn:=xlValues)
     
    Range("c2:c" & Range("c2").End(xlDown).Row).Replace What:=".", Replacement:="/", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    End Sub
    Denis

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

Discussions similaires

  1. [A-07] Problème dans un formulaire avec une requète de selection
    Par oraclus dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 24/12/2008, 00h06
  2. Problème dans un UPDATE avec jointure
    Par seblem dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/03/2008, 11h26
  3. Top 3 dans select/option avec removeChild
    Par artxtra dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/05/2007, 19h56
  4. Problème dans des "IF" avec des chaines de caractères
    Par lanysteph dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 11h37
  5. PL/SQL, problème dans un curseur avec un insert
    Par yador dans le forum PL/SQL
    Réponses: 4
    Dernier message: 27/01/2006, 14h31

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