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 SubBonjour,
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
.....
.....
.....
Endiferic
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.
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 IfSi 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 SubMais 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 Suberic
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