OVH Cloud OVH Cloud

Erreur ????????

5 réponses
Avatar
Jacques
Bonjour,

J'ai écris cette fonction pour créer une liste déroulante en filtrant les
doublons mais j'ai une erreur du type :
"Nombre d'arguments incorretc ou affection de propriété incorrecte"
Je n'arrive pas à trouer de ou ça vient.
Pouvez-vous m'aider ?
Voila mon code

Option Explicit


Private Sub UserForm_Initialize()
' Construction de la liste Transaction
List_transaction = Construction_list("b")

' On initalise la liste avec le premier nom
' List_transaction.Value = List_transaction(1)
End Sub

Function Construction_list(col As String)

Dim i As Integer, derlg
Dim Cell As Range
Dim List_temp As New Collection
Dim List_ret As New Collection

On Error Resume Next
'filtre les doubons pas collection
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_temp.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0

'insertion données uniques dans le Combobox
For i = 1 To List_temp.Count
If (List_temp(i) <> "") Then List_ret.Add List_temp(i)
Next i

Construction_list = List_ret
End Function


Merci d'avance
Jacqques

5 réponses

Avatar
Christian Hugoud
Essaie déjà de mettre cela dans le load. Dans l'initialize, rien n'est
encore créé.

Christian

"Jacques" a écrit dans le message de news:
4334f3ca$0$1709$
Bonjour,

J'ai écris cette fonction pour créer une liste déroulante en filtrant les
doublons mais j'ai une erreur du type :
"Nombre d'arguments incorretc ou affection de propriété incorrecte"
Je n'arrive pas à trouer de ou ça vient.
Pouvez-vous m'aider ?
Voila mon code

Option Explicit


Private Sub UserForm_Initialize()
' Construction de la liste Transaction
List_transaction = Construction_list("b")

' On initalise la liste avec le premier nom
' List_transaction.Value = List_transaction(1)
End Sub

Function Construction_list(col As String)

Dim i As Integer, derlg
Dim Cell As Range
Dim List_temp As New Collection
Dim List_ret As New Collection

On Error Resume Next
'filtre les doubons pas collection
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_temp.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0

'insertion données uniques dans le Combobox
For i = 1 To List_temp.Count
If (List_temp(i) <> "") Then List_ret.Add List_temp(i)
Next i

Construction_list = List_ret
End Function


Merci d'avance
Jacqques



Avatar
Jacques
Excuse moi mais j'ai pas compris, je suis un débutant.

Jacques


"Christian Hugoud" a écrit dans le message de news:

Essaie déjà de mettre cela dans le load. Dans l'initialize, rien n'est
encore créé.

Christian

"Jacques" a écrit dans le message de news:
4334f3ca$0$1709$
Bonjour,

J'ai écris cette fonction pour créer une liste déroulante en filtrant les
doublons mais j'ai une erreur du type :
"Nombre d'arguments incorretc ou affection de propriété incorrecte"
Je n'arrive pas à trouer de ou ça vient.
Pouvez-vous m'aider ?
Voila mon code

Option Explicit


Private Sub UserForm_Initialize()
' Construction de la liste Transaction
List_transaction = Construction_list("b")

' On initalise la liste avec le premier nom
' List_transaction.Value = List_transaction(1)
End Sub

Function Construction_list(col As String)

Dim i As Integer, derlg
Dim Cell As Range
Dim List_temp As New Collection
Dim List_ret As New Collection

On Error Resume Next
'filtre les doubons pas collection
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_temp.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0

'insertion données uniques dans le Combobox
For i = 1 To List_temp.Count
If (List_temp(i) <> "") Then List_ret.Add List_temp(i)
Next i

Construction_list = List_ret
End Function


Merci d'avance
Jacqques







Avatar
Christian Hugoud
Le code que tu as placé est dans l'évènement Initialize de la feuille. Cet
évènement survient avant que la feuille (et donc ses composants et objets)
soit créée.

Place le même code dans l'évènement load. Enlève-le de l'Initialize.

Christian


"Jacques" a écrit dans le message de news:
43357664$0$27418$
Excuse moi mais j'ai pas compris, je suis un débutant.

Jacques


"Christian Hugoud" a écrit dans le message de
news:
Essaie déjà de mettre cela dans le load. Dans l'initialize, rien n'est
encore créé.

Christian

"Jacques" a écrit dans le message de news:
4334f3ca$0$1709$
Bonjour,

J'ai écris cette fonction pour créer une liste déroulante en filtrant
les doublons mais j'ai une erreur du type :
"Nombre d'arguments incorretc ou affection de propriété incorrecte"
Je n'arrive pas à trouer de ou ça vient.
Pouvez-vous m'aider ?
Voila mon code

Option Explicit


Private Sub UserForm_Initialize()
' Construction de la liste Transaction
List_transaction = Construction_list("b")

' On initalise la liste avec le premier nom
' List_transaction.Value = List_transaction(1)
End Sub

Function Construction_list(col As String)

Dim i As Integer, derlg
Dim Cell As Range
Dim List_temp As New Collection
Dim List_ret As New Collection

On Error Resume Next
'filtre les doubons pas collection
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_temp.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0

'insertion données uniques dans le Combobox
For i = 1 To List_temp.Count
If (List_temp(i) <> "") Then List_ret.Add List_temp(i)
Next i

Construction_list = List_ret
End Function


Merci d'avance
Jacqques











Avatar
parci
On Sat, 24 Sep 2005 12:34:43 +0200, "Christian Hugoud"
wrote:

Essaie déjà de mettre cela dans le load. Dans l'initialize, rien n'est
encore créé.



C'est du VBA (l'événement Initialize est équivalent au Load de VB)

L'erreur vient de la fonction Construction_list qui retourne une
collection donc un objet : dans ce cas l'affectation doit se faire
avec Set. Même chose quand tu affecte le résultat de la fonction dans
la variable List_transaction (qui n'est pas déclarée). D'autre part,
ça serait mieux de typer explicitement le type de variable que doit
retourner cette fonction. Enfin, la collection ainsi construire
contient des références sur des objets Range, si j'ai à peu près
compris c'est les valeurs qui t'intéresse. Et en prime, le dernier
bloc n'a aucune utilité : si une valeur existe déjà dans la
collection, elle ne peut être ajoutée (normalement il y a une erreur
de générée mais ignorée ici du fait du On Error Resume Next).

Avec ces quelques corrections :

Private Sub UserForm_Initialize()

' Construction de la liste Transaction
Dim List_transaction As Collection
Set List_transaction = Construction_list("b")

' on fait des trucs
' et on libère la référence
Set List_transaction = Nothing

End Sub

Function Construction_list(col As String) As Collection

Dim i As Integer
Dim derlg As Long
Dim Cell As Range
Dim List_ret As New Collection

On Error Resume Next
'filtre les doubons
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_ret.Add Cell.Value, CStr(Cell)
Next Cell
On Error GoTo 0

Set Construction_list = List_ret

End Function


Personnellement je l'écrirai plutôt comme ça (c'est plus lisible
d'intialiser puis de libérer la référence sur une variable objet dans
la procédure où elle utilisée) :

Private Sub UserForm_Initialize()

' Construction de la liste Transaction
Dim List_transaction As Collection
Set List_transaction = New Collection

If Construction_list("b", List_transaction) Then
' on fait des trucs
End If

' et on libère la référence
Set List_transaction = Nothing

End Sub

Function Construction_list(col As String, _
List_transaction As Collection) As Boolean

Dim i As Integer
Dim derlg As Long
Dim Cell As Range

On Error Resume Next
'filtre les doubons
derlg = Range(col & "65536").End(3).Row
For Each Cell In Range(col & "2:" & col & derlg)
List_transaction.Add Cell.Value, CStr(Cell)
Next Cell
On Error GoTo 0

Construction_list = True

End Function
Avatar
Jacques93
Bonjour Christian Hugoud,
Christian Hugoud a écrit :
Le code que tu as placé est dans l'évènement Initialize de la feuille. Cet
évènement survient avant que la feuille (et donc ses composants et objets)
soit créée.

Place le même code dans l'évènement load. Enlève-le de l'Initialize.

Christian




D'après le code posté par Jacques :

Private Sub UserForm_Initialize()

donc l'utilisation, d'un UserForm, il semble qu'il s'agisse de code VBA
Excel. D'ailleurs la question a été également posée sur mpfe. Et en VBA
Excel, il n'y a pas d'événement Load. Je crois que son problème a été
solutionné.

--
Cordialement,

Jacques.