Autres Subtilité VBA FIND (occurence suivant plage de recherche)

zebanx

XLDnaute Accro
Bonjour,

Auriez-vous SVP une explication concernant la première adresse retrouvée sur une plage définie pour trouver la deuxième occurence qui n'indique pas le même résultat ? :
- si on commence en E6
- si on commence en E7

La boucle me parait correcte et cela m'avait échappé auparavant.

Je vous en remercie par avance.
zebanx
 

Pièces jointes

  • Sub_find.xlsm
    19.8 KB · Affichages: 4
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Où la magie de F1 nous donne une indication en ce qui concerne le problème, l'argument After:


NomObligatoire/FacultatifType de donnéesDescription
WhatObligatoireVarianteDonnées à rechercher. Il peut s'agir d'une chaîne ou de tout autre type de données Microsoft Excel.
AfterFacultatifVarianteCellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument Après doit correspondre à une seule cellule de la plage. Rappelez-vous que la recherche commence après cette cellule ; la cellule spécifiée n'est pas recherchée jusqu'à ce que la méthode revienne à cette cellule. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.
LookInFacultatifVarianteType d'informations.
LookAtFacultatifVarianteIl peut s'agir de l'une des constantes XlLookAt suivantes : xlWhole ou xlPart.
SearchOrderFacultatifVarianteIl peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByRows ou xlByColumns.
SearchDirectionFacultatifLien suppriméDirection de la recherche.
MatchCaseFacultatifVarianteTrue pour que la recherche respecte la casse. La valeur par défaut est False.
MatchByteFacultatifVarianteS'utilise uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. True pour que les caractères codés sur deux octets ne correspondent qu'aux caractères codés sur deux octets. False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.
SearchFormatFacultatifVarianteFormat de la recherche.

Bon consultation
 

zebanx

XLDnaute Accro
Bonjour Roblochon, Pierrejean

Merci pour vous être intéressé au sujet et pour votre retour.:cool:

Bon, l'argument suivant permet d'obtenir le résultat souhaité (plus de xlvalues, xlwhole)
Set x = plage.Cells.Find(Valeur, After:=Range("E7"))

Mais je dois faire des tests complémentaires quand même (casse...).

xl-ment
zebanx
 

zebanx

XLDnaute Accro
Re-

Un update avec un rajout de code qui donne une méthode de contournement (l'idée étant de l'utiliser dans un UDF j'ai besoin de cette première cellule d'adresse... variable infine pour un UDF).
Code 2 : C'est ma compréhension de l'utilisation de AFTER qui montre deux limites (casse, occurence 1) mais je ne la maitrise pas.

On ne perd pas trop de temps dessus, vous m'avez déjà beaucoup aidé. Et très vite de surcroit ;)
Ca me paraissait toutefois important de partager cela avec vous.

@+
 

Pièces jointes

  • Sub_find.xlsm
    22.1 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Merci pour ce partage.

Le truc que j'emploie dans ces cas là c'est de référencer la dernière cellule de la plage pour le paramètre After, puisque la méthode find tourne en boucle.

VB:
Sub adresse_plage_find()
    j = 0
    '-- critères de recherche (plage, valeur et occurence recherchée)
    Set plage = Range("E7:M25")
    'plagey = plage.Address
    Valeur = "NOM"
    a = Cells(1, 6)

    '-- méthode find
    Set x = plage.Find(Valeur, plage.Cells(plage.Rows.Count, plage.Columns.Count), xlValues, xlWhole)
    If Not x Is Nothing Then
        FirstAddress = x.Address
        Do
            xa = x.Address
            j = j + 1
            If j = a Then Exit Do
            Set x = plage.FindNext(x)
        Loop While Not x Is Nothing And x.Address <> FirstAddress
    End If

    '-- restitution
suite:
    Cells(2, 1) = xa  '-- indique la troisième occurence !!
End Sub

Méthode implémentée dans la macro du bouton M1

A bientôt
 

Pièces jointes

  • Sub_find (1).xlsm
    22 KB · Affichages: 6

Statistiques des forums

Discussions
311 711
Messages
2 081 796
Membres
101 817
dernier inscrit
carvajal