[E-02] Chaine trop longue pour Validation.Add
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:
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:
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:
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!