Un appel de fonction dans la partie gauche etc

Bonjour à tous,

Ceci est mon premier post.

Je suis plus que débutant et évidemment je bloque...

Mon soucis :

Dans un userform, lorsque je teste le contenu d'un combo box pour afficher un MsgBox

j'ai une erreur de compilation :

un appel de fonction dans la partie gauche de l'affectation doit renvoyer Variant ou Object.

Là je sèche !

Si vous pouvez m'expliquer, par avance merci.

Mon code :

Private Sub Valid_Click()
Dim CellsDem As Integer
Dim NumT As Integer
Dim NomP As String
Dim Clb As String

If NumTireur.Value = "" Then MsgBox = "manque N° de tireur !"

End If

CellsDem = 3

    Do Until Cells(CellsDem, 1) = ""
    CellsDem = CellsDem + 1
    Loop

Cells(CellsDem, 1) = NumTireur.Value
Cells(CellsDem, 2) = NomPrenom.Value
Cells(CellsDem, 3) = NumLicence.Value
Cells(CellsDem, 4) = Club.Value
Cells(CellsDem, 6) = Disci1.Value
Cells(CellsDem, 8) = SerieDisci1.Value
Cells(CellsDem, 9) = Pdisci1.Value

    If Disci2.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci2.Value
        Cells(CellsDem, 8) = SerieDisci2.Value
        Cells(CellsDem, 9) = Pdisci2.Value
        Else: GoTo Sortie
    End If

    If Disci3.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci3.Value
        Cells(CellsDem, 8) = SerieDisci3.Value
        Cells(CellsDem, 9) = Pdisci3.Value
        Else: GoTo Sortie
    End If

    If Disci4.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci4.Value
        Cells(CellsDem, 8) = SerieDisci4.Value
        Cells(CellsDem, 9) = Pdisci4.Value
        Else: GoTo Sortie
    End If

    If Disci5.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci5.Value
        Cells(CellsDem, 8) = SerieDisci5.Value
        Cells(CellsDem, 9) = Pdisci5.Value
        Else: GoTo Sortie
    End If

    If Disci6.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci6.Value
        Cells(CellsDem, 8) = SerieDisci6.Value
        Cells(CellsDem, 9) = Pdisci6.Value
        Else: GoTo Sortie
    End If

    If Disci7.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci7.Value
        Cells(CellsDem, 8) = SerieDisci7.Value
        Cells(CellsDem, 9) = Pdisci7.Value
        Else: GoTo Sortie
    End If

    If Disci8.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci8.Value
        Cells(CellsDem, 8) = SerieDisci8.Value
        Cells(CellsDem, 9) = Pdisci8.Value
        Else: GoTo Sortie
    End If

Sortie:

End Sub

Bonjour,

tu as mis un signe = en trop dans l'appel de la fonction msgbox,

voir correction ci-dessous

JLP a écrit :

Bonjour à tous,

Ceci est mon premier post.

Je suis plus que débutant et évidemment je bloque...

Mon soucis :

Dans un userform, lorsque je teste le contenu d'un combo box pour afficher un MsgBox

j'ai une erreur de compilation :

un appel de fonction dans la partie gauche de l'affectation doit renvoyer Variant ou Object.

Là je sèche !

Si vous pouvez m'expliquer, par avance merci.

Mon code :

Private Sub Valid_Click()
Dim CellsDem As Integer
Dim NumT As Integer
Dim NomP As String
Dim Clb As String

If NumTireur.Value = "" Then MsgBox "manque N° de tireur !"
'je mettrais un
'exit sub
End If

CellsDem = 3

    Do Until Cells(CellsDem, 1) = ""
    CellsDem = CellsDem + 1
    Loop

Cells(CellsDem, 1) = NumTireur.Value
Cells(CellsDem, 2) = NomPrenom.Value
Cells(CellsDem, 3) = NumLicence.Value
Cells(CellsDem, 4) = Club.Value
Cells(CellsDem, 6) = Disci1.Value
Cells(CellsDem, 8) = SerieDisci1.Value
Cells(CellsDem, 9) = Pdisci1.Value

    If Disci2.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci2.Value
        Cells(CellsDem, 8) = SerieDisci2.Value
        Cells(CellsDem, 9) = Pdisci2.Value
        Else: GoTo Sortie
    End If

    If Disci3.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci3.Value
        Cells(CellsDem, 8) = SerieDisci3.Value
        Cells(CellsDem, 9) = Pdisci3.Value
        Else: GoTo Sortie
    End If

    If Disci4.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci4.Value
        Cells(CellsDem, 8) = SerieDisci4.Value
        Cells(CellsDem, 9) = Pdisci4.Value
        Else: GoTo Sortie
    End If

    If Disci5.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci5.Value
        Cells(CellsDem, 8) = SerieDisci5.Value
        Cells(CellsDem, 9) = Pdisci5.Value
        Else: GoTo Sortie
    End If

    If Disci6.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci6.Value
        Cells(CellsDem, 8) = SerieDisci6.Value
        Cells(CellsDem, 9) = Pdisci6.Value
        Else: GoTo Sortie
    End If

    If Disci7.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci7.Value
        Cells(CellsDem, 8) = SerieDisci7.Value
        Cells(CellsDem, 9) = Pdisci7.Value
        Else: GoTo Sortie
    End If

    If Disci8.Value <> "" Then
        CellsDem = CellsDem + 1
        Cells(CellsDem, 1) = NumTireur.Value
        Cells(CellsDem, 2) = NomPrenom.Value
        Cells(CellsDem, 3) = NumLicence.Value
        Cells(CellsDem, 4) = Club.Value
        Cells(CellsDem, 6) = Disci8.Value
        Cells(CellsDem, 8) = SerieDisci8.Value
        Cells(CellsDem, 9) = Pdisci8.Value
        Else: GoTo Sortie
    End If

Sortie:

End Sub

Bonjour,

Rien à voir mais tant qu'on y est autant que tu prennes de bonnes habitudes : éviter les goto (sauf pour les traitements d'erreur) .

Tu peux écrire ainsi :

    If Disci2.Value <> "" Then
        .....
    ElseIf Disci3.Value <> "" Then
        .....
        .....
        .....
    Endif

eric

Bonjour,

Merci à vous deux pour vos réponses.

h2so4 : le signe était tellement évident que je ne le voyais pas ! (quel âne).

Cependant tu me dis de mettre un exit sub. Là je me retrouve bloqué sur mon userform et ma seule solution est de sortir par un bouton "quitter". Peut-on faire en sorte de revenir à la saisie et de pouvoir revalider avec le même bouton ?

eriiic : ta solution du elseif ne fonctionne pas. Les cellules ne sont pas remplies. J'ai supprimé les goto et étiquette associées mais cela ne fonctionne plus. Ai-je oublié quelque-chose ??

J'ai du pain sur la planche....!

Encore merci.

@+

JLP

JLP a écrit :

Bonjour,

Merci à vous deux pour vos réponses.

h2so4 : le signe était tellement évident que je ne le voyais pas ! (quel âne).

Cependant tu me dis de mettre un exit sub. Là je me retrouve bloqué sur mon userform et ma seule solution est de sortir par un bouton "quitter". Peut-on faire en sorte de revenir à la saisie et de pouvoir revalider avec le même bouton ?

@+

JLP

bonjour,

si l'ajout du exit sub ne te permet pas de faire ce que tu veux. remets-le en commentaire. Ma proposition se basait sur ton code uniquement, je n'ai pas la vue d'ensemble sur tes formes et tes autres procédures.

Merci s2ho4.

@+

Bonjour,

J'avais lu un peu trop en diagonale ton code.

Tu as une erreur dans :

If NumTireur.Value = "" Then MsgBox = "manque N° de tireur !"
End If

Si tu écris qcq chose derrière le Then tu es sur un If sur 1 ligne du type If ... Then ... Else ...

Dans ce cas pas de End If en dessous.

Si tu n'écris rien derrière le Then tu es sur un If sur plusieurs lignes où le EndIf est nécessaire :

If ...

Then

else

End if

Sans doute pour ça que la proposition de h2so4 n'allait pas comme tu voulais.

Une proposition pour alléger le code :

Private Sub Valid_Click()
    Dim CellsDem As Integer
    Dim NumT As Integer
    Dim NomP As String
    Dim Clb As String
    Dim i As Long

    If NumTireur.Value = "" Then
        MsgBox = "manque N° de tireur !"
        exit sub ' à tester
    End If

    CellsDem = Application.Max(3, Cells(Rows.Count, 1).End(xlUp).Row + 1)

    For i = 1 To 7
        If Me.Controls("Disci" & i).Value <> "" Then
            Cells(CellsDem, 1) = NumTireur.Value
            Cells(CellsDem, 2) = NomPrenom.Value
            Cells(CellsDem, 3) = NumLicence.Value
            Cells(CellsDem, 4) = Club.Value
            Cells(CellsDem, 6) = Me.Controls("Disci" & i).Value
            Cells(CellsDem, 8) = Me.Controls("SerieDisci" & i).Value
            Cells(CellsDem, 9) = Me.Controls("Pdisci" & i).Value
        Else
            Exit For
        End If
    Next i
End Sub

Mais impossible de tester quoique ce soit sans fichier, nécessite peut-être des adaptations.

eric

Bonjour,

Merci eriiic pour ta proposition, mais celle-ci ne fonctionne pas...!

Elle ne prend en compte que la premiere Disci.

Par contre j'ai rien capté à ton code (du moins en grande partie...)

Je joins le fichier, on sait jamais.

Encore merci.

JLP.

J'avais oublié de passer à la ligne suivante :

Private Sub Valid_Click()
    Dim CellsDem As Integer
    Dim NumT As Integer
    Dim NomP As String
    Dim Clb As String
    Dim i As Long

    If NumTireur.Value = "" Then
        MsgBox "manque N° de tireur !"
        Exit Sub
    End If

    ' dernière ligne occupée
    CellsDem = Application.Max(3, Cells(Rows.Count, 1).End(xlUp).Row)

    For i = 1 To 7
        'pour les control Disci1 à Disci7
        If Me.Controls("Disci" & i).Value <> "" Then
            ' si Disci choisi
            'ligne suivante
            CellsDem = CellsDem + 1
            ' remplir ligne
            Cells(CellsDem, 1) = NumTireur.Value
            Cells(CellsDem, 2) = NomPrenom.Value
            Cells(CellsDem, 3) = NumLicence.Value
            Cells(CellsDem, 4) = Club.Value
            Cells(CellsDem, 6) = Me.Controls("Disci" & i).Value
            Cells(CellsDem, 8) = Me.Controls("SerieDisci" & i).Value
            Cells(CellsDem, 9) = Me.Controls("Pdisci" & i).Value
        Else
            'si Disci vide on arrête
            Exit For
        End If
    Next i
End Sub

eric

Bonsoir,

eriiic encore merci pour ton aide.

Cependant il a fallu modifier...

Je m'explique : dans la 2eme version de ton code, il n'y avait plus le + 1 après le row de la fin de la ligne de code qui détecte

la dernière ligne occupée; Je l'ai rajouté.

Ensuite le CellsDem = CellsDem + 1 était situé juste après le if et me décalait d'une ligne.

je l'ai mis juste avant le else qui suit.

Avec tout ça maintenant cela fonctionne !

Yahoooo!

Merci beaucoup !!

@+

JLP

Ok, tu as bien fait, je n'avais pas testé sur une feuille vierge.

N'oublie pas de mettre en résolu dans le message concerné.

eric

Rechercher des sujets similaires à "appel fonction partie gauche etc"