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

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
Et voici ma fonction RechercheIntitule

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
Merci pour votre aide!