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 :

sens de string1 > string2 en vba, cohérence avec le tri excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Par défaut sens de string1 > string2 en vba, cohérence avec le tri excel
    Bonjour! Voici une question épineuse ...
    Au sein d'une macro, j'ai besoin de rechercher une chaîne de caractère parmi une longue liste de chaînes qui sont en colonne dans le classeur.
    Par exemple, j'ai en colonne A tous les prénoms de mes collègues (1000 noms) et je cherche la ligne où apparait Robert.
    Me souvenant de mes vieux cours d'info, je me tente un "diviser pour régner" :
    1) Je trie la colonne A par ordre croissant
    2) Je regarde à la moitié, ligne 500. Je tombe sur Laurent
    3) Robert > Laurent dans l'ordre alphabétique donc je recommence en me concentrant sur les lignes 501 à 1000, ceci avec une fonction par récurrence.
    Problème, une comparaison "If string1 > string2 ..." ne donne pas le même ordre que le tri "Selection.Sort" dans quelques cas particuliers.
    Si je trie par ordre croissant:
    Oi
    Oa
    O-Z
    J'obtiens
    Oa
    Oi
    O-Z
    Pourtant, si string1="Oa" et string2="O-Z" alors string1 > string2.
    En fait, la règle de tri par ordre alphabétique n'est pas cohérente entre les deux méthodes et de ce fait, ma méthode de recherche échoue pour toutes les chaînes incorporant des tirets (et je suppose que je vais découvrir d'autres exceptions).
    Alors, que faire ?

  2. #2
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Tu fais un EQUIV qui te renverra le N° d'index de la ligne contenant la valeur cherchée...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi t'embêter à faire une recherche de ce type alors qu'Excel offre pleins de possibilités de recherches qui seront plus rapides que la tienne.

    Comme le dit Maxence tu as la fonction Equiv ou aussi la fonction Find, en résumant Excel offre des possibilités sans ce type de boucles.

    Philippe

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Par défaut
    Je ne le faisais pas parceque mes valeurs sont préalablement groupées dans une variable tableau, donc je fais la recherche au sein de cette variable tableau plutôt que dans le classeur (je ne l'avais pas précisé).
    Je me disais que ça aurait le double avantage d'une rapidité accrue et d'éviter le clignotement de l'écran quand Excel navigue très vite d'une ligne à l'autre au cours des recherches.
    Cela dit, la nuit m'ayant porté conseil, et vos réponses m'ayant ouvert les yeux sur une toute autre approche , je me dis que ça n'en vaut pas la peine vu les complications et que je ferais mieux de m'en tenir à un EQUIV dans le classeur !
    Merci !

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un test par macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub test()
    dim c as range
     
    application.screenupdating=false 'inhiber le rafraichissement ecran, pas nécessaire pour ce ptit test mais pour répondre à l'une de tes question
    set c=sheets("feuil1").range("A:A").find("Robert", lookat:=xlpart)
    if not c is nothing then 
       msgbox "Premier Robert trouvé à la cellule A" & c.row
       set c=nothing
    endif
    end sub

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par gxrald Voir le message
    'éviter le clignotement de l'écran quand Excel navigue très vite d'une ligne à l'autre au cours des recherches.
    !
    voir à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False / True
    cordialement,

    Didier

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Par défaut
    Oui j'ai vu ça dans le code de mercatog et c'est bien pratique !

    J'ai un cas qui pose problème avec la méthode find ...
    les cellules qui contiennent des ~ ne sont jamais trouvées! C'est vrai que c'est un caractère exotique mais bon j'ai ça dans ma liste ...
    J'ai fait le test directement dans Excel, en entrant test~bizarre, puis control F et je cherche exactement le même texte... Excel ne le trouve pas, et ma fonction find non plus.

  8. #8
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.


    Je reviens à ta question initiale,
    Citation Envoyé par gxrald Voir le message
    Pourtant, si string1="Oa" et string2="O-Z" alors string1 > string2.
    En fait, la règle de tri par ordre alphabétique n'est pas cohérente entre les deux méthodes ...
    Au début du module qui contient le code qui fait les comparaisons, tu places et les comparaisons string1, string2 devraient devenir cohérentes avec l'ordre de tri dans la feuille Excel.

    Cordialement,

    PGZ

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Par défaut
    Mercatog : exact, pour trouver "test~bizarre" il faut chercher "test?bizarre". Ça ne s'invente pas !
    pgz : Pour l'instant j'ai changé mon fusil d'épaule et m'appuie sur la fonction find, mais c'est bon à savoir. Merci !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Par défaut
    Pour info il y a un autre comportement particulier, avec les chaines de caractère qui commencent par '
    Mais en traitant ce cas à part, ça m'a l'air bon maintenant !
    Merci !

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

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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