Bonjour,
J'essaye de créer une liste déroulante avec des différents choix possible pour l'utilisateur.
Les composantes de cette liste déroulante sont gérées sur le workbook de la macro sur une feuille "Orga".
Le workbook où se situe la macro est un outil de pilotage : aucune donnée est importée sur le workbook.
Les deux exemples suivants sont bon lorsque la valeur de propiété Formula1 est courte. Par contre, ce code plante lorsque Formula1 contient une chaine de caractère longue : >285 (ma chaine fait 513 carac de long).
Voici mes deux mains différents (de peu) qui entrainent deux erreurs differentes :
1 Entraine l'erreur'-2147417848' Automation error
The object invoked has disconnected from its client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub test() Workbooks.Open Chemin sWk = ActiveWorkbook.Name With Workbooks(sWk).ActiveSheet .Range(.Cells(1, 1), .Cells(3, 1)).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=RechercheIntitule("Etat") End With End Sub
2 Entraine l'erreur'-2147417848' (La même à priori) Methode 'Add' of object Validation Failed
Et voici ma fonction RechercheIntitule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub test() Workbooks.Open Chemin sWk = ActiveWorkbook.Name With Workbooks(sWk).ActiveSheet .Range(.Cells(1, 1), .Cells(3, 1)).Validation.Add xlValidateList, xlValidAlertStop, xlBetween, RechercheIntitule("Etat") End With End Sub
Merci pour votre aide!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Function RechercheIntitule(ByVal Intitule As String) As String RechercheIntitule = "" Dim bMasquer As Boolean 'Feuille Orga masquée ou non Debug.Print "--> RechercheIntitule" With ThisWorkbook bMasquer = .Sheets("Orga").Visible If .Sheets("Orga").Visible = False Then .Sheets("Orga").Visible = True End If With ThisWorkbook.Sheets("Orga") j = 1 While Not .Cells(1, j) Like Intitule j = j + 1 If j > 250 Then Exit Function End If Wend i = 2 While .Cells(i, j) <> "" RechercheIntitule = RechercheIntitule & .Cells(i, j) & "," i = i + 1 Wend RechercheIntitule = Left(RechercheIntitule, Len(RechercheIntitule) - 1) End With If bMasquer = False Then .Sheets("Orga").Visible = False End If End With Debug.Print "<-- RechercheIntitule" End Function
Partager