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 WithMerci 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 .Validationdevrait 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ûrEn tout cas, je suis ravi que tout fonctionne !
On se reverra peut-être sur un autre sujet
Cdlt,