Rechercher dans une page la valeur d'une cellule (dans un string)

Super c'est exactement ce que je voulais.

J'ai juste retirer le {1+} dans le code suivant afin que les colonnes sélectionnées soient A / E / I / etc.. (et non B / F / J / etc...) :

strformule = "=OFFSET(Sheet2!$A1:A" & dl & ",, 1 + (" & I & "-1) * 4)"

Le code suivant ne marche pas car sinon j'obtiens le message {Next sans For} :

with ThisWorkbook.Worksheets("Liste candidats").Range("MonTab[CNUM]")(I)
    With .Validation

(Mais c'est pas grave, ca fonctionne très bien avec un .Select

Par contre, la première Dropdown list (pour I=1) ne donner que la première cellule de la première colonne alors ne comprenant pas le pourquoi du comment j'ai mis :

                If I = 1 Then
                    strformule = "=Sheet2!$A:$A"

                Else
                    strformule = "=OFFSET(Sheet2!$A1:A" & dl & ",, (" & I & "-1) * 4)"

                End If

                    ThisWorkbook.Worksheets("Liste candidats").Range("MonTab[CNUM]")(I).Select
                        With Selection.Validation
                            .Delete
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                            xlBetween, Formula1:=strformule
                            .IgnoreBlank = True
                            .InCellDropdown = True
                            .InputTitle = ""
                            .ErrorTitle = ""
                            .InputMessage = ""
                            .ErrorMessage = ""
                            .ShowInput = True
                            .ShowError = False
                        End With

Merci encore pour la patience que tu as eut pour comprendre mon problème

Salut sartou,

Je te remercie de ce retour ! Et je suis vraiment content que ça marche !

Il vaut mieux éviter le select tant que possible, d'autant qu'ils ralentissent considérablement le code :

with ThisWorkbook.Worksheets("Liste candidats").Range("MonTab[CNUM]").cells(I) 'ou .cells(I, 1)
    With .Validation

devrait marcher.

C'est bizarre ce cas de la première ligne. Ca voudrait dire que dl vaut 1 à la première itération ?

L'affectation de dl est-elle bien placée avant de définir la validation, voire même avant la boucle ?

Cdlt,

Ah c'est pour ca que si je commence mon code avec l'expression suivant c'est horriblement lent :

    Set rngx = Application.InputBox( _
    "séléction des candidats:", "Selection du tableau", _
    Application.Selection.Address, Type:=8)

J'ai remplacer tous mes .Select par des Application.Goto (J'en avais deux dans le code), je sais pas si c'est mieux, mais le code est plutôt rapide.

Sinon, le debug Tool me disait {Next sans For} mais en fait il manquait un {End With} vu qu'on venait d'en rajouter un, donc maintenant le code fonctionne sans ce .Select là.
Et pour le problème avec dl, effectivement, je l'avais placer dans la boucle mais avant la boucle de recherche. Si je le place après tout fonctionne.

Merci encore

Ce que je veux dire, c'est qu'on a parfois besoin de sélectionner un élément mais ça reste rare et on peut agir dessus en y faisant référence. Et donc une boucle avec une instruction .select, ça terriblement lent parce qu'à chaque itération, on sélectionne une cellule.

Pour ce qui est de l'inputbox, je ne sais pas si ça ralentit particulièrement... Ca marque un arrêt dans l'exécution.

Par exemple, il vaudrait mieux l'avoir ainsi :

Set rngx = Application.InputBox("séléction des candidats:", "Selection du tableau", "$A$1:$D$5", Type:=8) 'c'est un exemple bien sûr

En tout cas, je suis ravi que tout fonctionne !

On se reverra peut-être sur un autre sujet .

Cdlt,

Rechercher des sujets similaires à "rechercher page valeur string"