Impossible de définir la propriété RowSource

Bonjour,

j'ai une application excel pour gérer les adhérents d'une association que a 400 adhérents.

J'ai ajouté un ComboBox (Name: cboesch, RowSource: listemontant et il devrait listeesch).

Voici le message

rowsource

et voici le fichier

Pouvez vous m'aider?

Merci de votre réponse.

8exemple.xlsm (50.93 Ko)

Bonjour,

Mieux vaut éviter de définir la RowSource en dur dans l'USF, fais-le via le code à l'initialisation

Ceci dit, je n'ai pas de souci de mon côté, mais vu toutes les erreurs #REF! qu'il y a, à vérifier de ton côté

image

A+

Bonjour

je préfère les

Me.cbocivilite.List = [tcivilite].Value

J'ai donc modifié ton fichier et j'ai ajouté un scrollbar...

9exemple.xlsm (46.50 Ko)

A+ François

merci,

pour les #REF! c'est normal car j'ai supprimé des champs du USF.

et ceci c'est un exemple.

Bonjour le fil,

COMPAN, Si vous nous faites parvenir votre fichier final anonymisé, nous pourrons vous aider à le finaliser.

Sinon quelques commentaires vite fait :

Pourquoi ne pas utiliser une feuille modèle pour l'impression de la fiche adhérent au lieu de passer par des API ?

Le bouton sauvegarde ajoute systématiquement une ligne au tableau, (Donc pas d'édition d'une fiche possible.)

Pourquoi utiliser des tableaux pour des listes aussi simple que "M., Mme" ? un simple cbocivilite.List = VBA.Array("M.", "Mme")

Dans l'initialisation du formulaire :

Dim TS As ListObject
Dim ligne As Integer

Set TS = Range("Source").ListObject
With TS
    ligne = ActiveCell.Row - .DataBodyRange.Row + 1

Vous ne testez pas si le tableau existe, ni le « DataBodyRange » c'est le meilleur moyen de se prendre un coup de pied par le compilateur.

Au lieu de récupérer un hypothétique numéro de ligne charger plutôt la première ligne si elle existe et travaillez avec elle.

Quand vous avez du code qui se répète :

If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0: MsgBox "Saisie non valide", vbCritical

Préférer lui une petite fonction :

Private Sub GetIsNumeric(ByRef value As MSForms.ReturnInteger)
    If InStr("1234567890", Chr(value)) = 0 Then
        Beep
        value = 0
    End If
End Sub

Et pour l'appel :

Private Sub txtdate_Keypress(ByVal KeyAscii As MSForms.ReturnInteger)
    GetIsNumeric KeyAscii
End Sub

Éviter les messages intrusifs qui lassent vite, préférez lui un « Beep » qui est suffisant.

Sur la fermeture :

Private Sub btnFermer_Click()
    Unload Me
    ActiveWorkbook.Save
End Sub

Vous devriez laisser le choix à l'utilisateur de sauvegarder ou non. Vous pourriez par exemple mettre un paramètre au classeur pour une sauvegarde automatique.

Merci de vos réponses mais je ne pas ouvrir le ComboBox Name: cboesch, RowSource: listeesch.

voir ceci:

1 rowsource

Re,

COMPAN, Comme l'a si bien dit JExceL2fr, n'utilisez pas RowSource ce ne pourras que vous créer des problèmes.

Utiliser plutôt la propriété List

Exemple :

Private Sub InitListes()
    With Me.cboesch
        .List = VBA.Array("0,00", "120,00", "165,00")
    End With
End Sub

et pour l'appel :

Private Sub UserForm_Initialize()
    '// Initialisation des listes
    InitListes

    Dim TS As ListObject
    Dim ligne As Integer

    Set TS = Range("Source").ListObject
    With TS
        ligne = ActiveCell.Row - .DataBodyRange.Row + 1
        Me.cbocivilite = .DataBodyRange(ligne, 1)
        Me.txtnom = .DataBodyRange(ligne, 2)
        Me.txtprenom = .DataBodyRange(ligne, 3)
        Me.txtdate = .DataBodyRange(ligne, 4)
        Me.txtn_carte = .DataBodyRange(ligne, 5)
        If Me.txtn_carte = vbNullString Then
            Me.txtn_carte = WorksheetFunction.Max(.ListColumns(5).DataBodyRange) + 1
        End If
        Me.cboformation = .DataBodyRange(ligne, 6)
        Me.txtdateformation = .DataBodyRange(ligne, 7)
        Me.cboesch = .DataBodyRange(ligne, 8)
        Me.cbocotisation = .DataBodyRange(ligne, 9)

    End With
End Sub

Edit : Vous devez effacer ce que contient RowSource dans les propriétés du formulaire, sinon VBA lèvera une erreur.

Merci pour tout et merci de votre aide.

Re,

Parfait alors, je me suis rendu compte que je m'était trompé sur le contenu de la zone de liste. Il fallait lire :
Private Sub InitListes()
    With Me.cboesch
        .List = VBA.Array("0,00", "120,00", "165,00")
    End With
End Sub

Mon offre tient toujours si vous voulez finaliser votre classeur.

Bonne programmation.

Bonjour,

Je vous avait écrit de ne pas utiliser Rowssource (comme Jexcel2FR et Jean-Paul vous le mentionne judicieusement) et à la vue de votre fichier vous n'avez pas upgradé votre fichier avec ce que je vous ai proposé ici --> https://forum.excel-pratique.com/s/goto/1270176
De ce fait vous n'avez pu, je pense pu lire mes remarques à ce sujet.

Crdlt

Mon pauvre Dan

Bonjour,

Je vous avait écrit de ne pas utiliser Rowssource (comme Jexcel2FR et Jean-Paul vous le mentionne judicieusement) et à la vue de votre fichier vous n'avez pas upgradé votre fichier avec ce que je vous ai proposé ici --> https://forum.excel-pratique.com/s/goto/1270176
De ce fait vous n'avez pu, je pense pu lire mes remarques à ce sujet.

Crdlt

Un âne bâté peut rester âne bâté toute sa vie, s'il ne veut pas faire un minimum d'effort
Je dis ça, je dis rien...

Rechercher des sujets similaires à "impossible definir propriete rowsource"