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 :

recherche verticale d'une chaine de caractères


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut recherche verticale d'une chaine de caractères
    bonjour à tous j'ai entendu parler d'une possibilité de recherche verticale et je me demandais comment je devais procéder afin de la programmer? j'aimerais en fait parcourir une colonne à partir d'une ligne x, et rechercher la première apparition d'une chaine de caractères que j'aurais stockée dans une autre feuille du classeur, afin de connaitre sa position dans la colonne. Est ce que quelqu'un pourrait m'aider s'il vous plait? j'ai essayer manuellement, mais parfois il ne prend pas la première apparition (de plus je n'arrive pas à fixer la colonne de recherche avec: rechercher/par colonne/...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Cells.Find(What:="Bloc Moteur", After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False).Activate
    avec ce code je n'arrive de plus pas à voir la position trouvée, afin de prendre la ligne du dessous pour afficher une valeur correspondante de quantité...

    merci à vous et bonne journée

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    ta meilleure aide c'est

    Tu tapes .find dans ton VBA et puis tu fais F1, et Oh miracle un exemple qui correspond très bien à ce que tu cherches.

    Merci l'aide en ligne.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    merci pour votre astuce, cependant j'ai toujours un soucis pour arriver à dégager la valeur de la ligne trouvée...voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        'recherche verticale de la première apparition des noms des ensembles afin de mettre les quantités correspondantes
        Cells(17, 7).Activate
        Cells.Find(What:=Nom_Ensemble, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        Cells(ligne_trouvée + 228, 7).Value = Quantite_Ensemble

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Mon petit doigt me dit que tu n'as pas lu l'aide en ligne.

    Voici ce que moi j'obtiens (E03)

    Example
    This example finds all cells in the range A1:A500 on worksheet one that contain the value 2 and changes it to 5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Worksheets(1).Range("a1:a500")
        Set c = .Find(2, lookin:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Value = 5
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    "ligne_trouvée" corespond a quoi???
    essaye d'utiliser la commande .row

    l'aide sur la commande est bien simple

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    voici ce que ça me donnait avec row:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       'recherche verticale de la première apparition des noms des ensembles afin de mettre les quantités correspondantes
        Cells(17, 7).Activate
        Cells.Find(What:=Nom_Ensemble, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
        Row = Row.Activate.Cells
        Cells(Row + 228, 7).Value = Quantite_Ensemble
    je vais essayer avec votre aide que je n'ai pas trouver ainsi... merci

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    et voici ma version avec votre aide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      With Worksheets(OngletTCDyn).Range("G21:G156")
        Set c = .Find(Nom_Ensemble, LookIn:=xlValues)
            If Not c Is Nothing Then
                Row = c.Address
             End If
        End With
         Cells(Row + 228, 7).Value = Quantite_Ensemble
    croyez vous que c'est correct?

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    lit l'aide apropos de Row, la commande fini par .row

    et c'est peut être pas une bonne idée d'utilisé comme nom de variable un nom de commande c'est pas super lisible (mais c'est personel comme avis)

    Pourquoi tu utilise la fonction activate?
    tu ne peux pas tout simplement ecrir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Numligne=Cells.Find(What:=Nom_Ensemble, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,  MatchCase:=False).row
     
    Cells(numligne+ 228, 7).Value = Quantite_Ensemble

  9. #9
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,
    Krovax : je pense que ton code simplifié va planter si le .FIND ne trouve pas l'occurence recherchée. il vaut donc mieux laisser le test sur le résultat "not is nothing".

    Babou466:
    en plus de la remarque judicieuse de Krovax sur .row au lien de .address, si le .FIND échoue, ton code risque de planter car tu utilises ROW indépendement que tu trouves ou pas.

    J'écrirais plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      With Worksheets(OngletTCDyn).Range("G21:G156")
        Set c = .Find(Nom_Ensemble, LookIn:=xlValues)
            If Not c Is Nothing Then
                Cells(c.Row + 228, 7).Value = Quantite_Ensemble
             End If
        End With

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    C'est vrai que je n'avais pas pensé à ca... j'ai encore du chemin a faire avant de ne plus passer une demi journée à débuger chaque modif de mes programmes

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    merci à vous!

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

Discussions similaires

  1. [Batch] Rechercher et renommer une chaine de caractère complexe dans un fichier texte
    Par mrcanardwc dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 24/06/2011, 14h02
  2. Problème de recherche de \ dans une chaine de caractères
    Par tus01 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 28/12/2010, 11h21
  3. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 12h51
  4. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 17h35

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