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 :

Trouver dernière chaine de caractère x


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut Trouver dernière chaine de caractère x
    Bonjour,

    J'ai cherché un peu partout une réponse, mais je ne trouve rien me permettant de faire exactement ce que je désire.

    Donc voici mon problème :
    J'ai une feuille contenant tout un tas de compte utilisateur où je dois en rajouter. Je cherche donc à trouver la dernière ligne d'un type de compte précis pour ajouter à la suite.

    Par exemple j'ai :
    [...]
    heff1ati9
    heff1ati10
    heff2ati1
    [...]

    Je veut rajouter 5 compte de type heff1ati*, donc j'aimerais connaître la valeur de la ligne de heff1ati10 pour insérer des lignes à cet endroit et ajouter mes comptes...

    seulement, comment dire, en vba :
    Trouve moi la dernière ligne contenant heff1ati* sans devoir faire une boucle for avec des IF interminable ? (j'ai plus de 3000 lignes).

    Au début je voulais faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set c = Feuil18.Range("A1:A65536").Find("", LookIn:=xlValues, lookat:=xlWhole) 'trouve première ligne vide
    rowmaj = c.row
    En modifiant pour trouver non pas la première ligne vide mais le dernier compte de type heff1ati*... seulement comment lui dire ?
    Donc là y'aurais Left(x, Len(compte)) où compte est la variable contenant heff1ati (car ça peut changer et pas toujours être de la même longueur).

    Ce qui donnerait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Feuil18.Range("A1:A65536").Find(Left(x, Len(compte)), LookIn:=xlValues, lookat:=xlWhole)
    où x doit correspondre à la cellule Ax... mais puisque cette cellule change tout le temps, comment lui dire que x = la cellule où tu es rendu ?

    Un grand merci d'avance pour votre aide

  2. #2
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Juste une idée comme ça....
    Pourquoi ne pas ajouter ta ligne en fin de tableau et de faire ensuite un tri du tableau sur la colonne des noms utilisateurs ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut
    hmmm...

    en fait ma liste est plutôt trié selon :
    Catégorie d'étude
    Section d'étude
    comptes

    Si je fais un tri sur le tout... j'obtiens :
    heff1pba1
    heff1pba10
    heff1pba11
    heff1pba12
    heff1pba13
    heff1pba14
    heff1pba15
    heff1pba16
    heff1pba17
    heff1pba18
    heff1pba19
    heff1pba2
    heff1pba20
    heff1pba21

    Donc s'il existe une option pour lui faire comprendre qu'il doit mettre le 10 après le 9 et le 20 après le 19 et ainsi de suite, ça pourrait marcher...

    Par contre, le fait de trouver la dernière occurrence me permet aussi de savoir quel est le numéro du dernier compte existant et de continuer ma numérotation ainsi...

    Mais je suis ouverte à toute solution autre qui peuvent donner les mêmes résultats au final

    Edit :
    C'est bon j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Feuil1.Range("A1:A65536").Find(compte, LookIn:=xlValues, LookAt:=xlPart) 'trouve première ligne du compte
    suffit donc de lui dire LookAt:=xlPart et il trouve tout valeur contenant au minimum 'compte'. Ensuite j'ai plus qu'à faire findnext jusqu'au dernier...

    y'a pas une façon de le faire chercher de bas en haut à la place ?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Shara Voir le message
    Donc s'il existe une option pour lui faire comprendre qu'il doit mettre le 10 après le 9 et le 20 après le 19 et ainsi de suite, ça pourrait marcher...
    Il faut numéroter les 9 premiers comme ceci :
    01, 02, 03, ..., 09
    A ce moment là 10 viendra se placer après le 09

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut
    Citation Envoyé par fring Voir le message
    Il faut numéroter les 9 premiers comme ceci :
    01, 02, 03, ..., 09
    A ce moment là 10 viendra se placer après le 09
    Ouais... mais non
    Car parfois j'ai jusqu'à 150 comptes d'un même type...
    donc 001...

    Mais surtout, les comptes actuel ont déjà prêt pour distribution, donc il est trop tard pour changer la numérotation.

    Puis bon, le problème du tri ne se pose plus vraiment, puisque j'arrive à trouver ma ligne.

    Seulement s'il pouvait commencer à chercher par la cellule A65536 et remontrer plutôt que descendre, ce serait encore plus pratique car il trouverait la dernière occurence directement, alors que là je dois faire un .findnext jusqu'à la dernière ligne concerné puisque commence à chercher à partir de A1

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Pas testé mais tu peux essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Feuil1.Range("A:A").Find(What:=compte, LookAt:=xlPart, After:=Feuil1.Range("A65535"), SearchDirection:=xlPrevious)

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Par défaut
    Citation Envoyé par fring Voir le message
    Pas testé mais tu peux essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Feuil1.Range("A:A").Find(What:=compte, LookAt:=xlPart, After:=Feuil1.Range("A65535"), SearchDirection:=xlPrevious)
    Ca fonctionne nickel !
    Grand merci !

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

Discussions similaires

  1. Comment trouver une chaine de caractère dans fichier texte
    Par youssef1989 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2008, 17h45
  2. comment trouver une chaine de caractère
    Par samplaid dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/03/2008, 15h18
  3. extraction dernière chaine de caractères
    Par m93.fred dans le forum Excel
    Réponses: 3
    Dernier message: 05/12/2007, 16h19
  4. [PHP-JS] Trouver une chaine de caractères
    Par calitom dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2007, 20h18
  5. Réponses: 4
    Dernier message: 03/01/2007, 11h39

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