[Catégorie modifiée VB6 -> VBA] VBA problème affichage UserFrom [Résolu]

Messages postés
16
Date d'inscription
mardi 3 mai 2011
Statut
Membre
Dernière intervention
5 octobre 2011
- - Dernière réponse : cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 12 mai 2011 à 11:37
Bonjour à tous,

J'ai un petit soucis sur VBA. J'ai créé une macro qui fait appel à un Userform. Hier, j'ai eu un bug d'excel (le bug classique, la macro à plantée, j'ai redémarré excel).

Depuis, lorsque je lance ma macro, un problème survient lors de l'ouverture de l'userform et fait planter la macro.

ci dessous mes codes.
*******************************************
CODE D'OUVERTURE DE LA MACRO (dans un module)
********************************************

Sub UserFormContacts()

MaBoite.Show 'C'EST ICI QUE LA LIGNE JAUNE APPARAIT SANS MESSAGE D'ERREUR !!

End Sub


*************************
CODE DU USERFORM
*************************

Private Sub CommandButton_Valider_Click()

Dim listdest, listcop As String
Dim i As Integer
Dim selection, selection2, selection3 As Boolean

nb = ListBox1.ListCount - 1



For i = 0 To nb

'on contrôle qu'un destinataire à bien été sélectionné
If ListBox1.Selected(i) = True Then
selection = True
End If

'on contrôle qu'un copie à bien été sélectionné
If ListBox2.Selected(i) = True Then
selection2 = True
End If

'on contrôle qu'un mail à bien été sélectionné
If ListBox3.Selected(i) = True Then
selection3 = True
End If

Next i

'on réalise l'action si pas sélectionné
If selection = False Then
MsgBox "Veuillez sélectionner un destinataire !", vbExclamation, "Destinataire manquant"
Exit Sub
End If

If selection2 = False Then
Select Case MsgBox("Vous n'avez pas sélectionné de copie (CC)" & Chr(10) & _
"Voulez-vous continuer ?", vbYesNo + vbQuestion, "Personne en copie")
Case vbNo
Exit Sub
End Select
End If

If selection3 = False Then
MsgBox "Veuillez sélectionner un mail !", vbExclamation, "Faites une sélection"
Exit Sub
End If

'*********************************************************
'on contrôle qu'un copie est bien sélectionné
'If ListBox2.Selected(i) = False Then
'Select Case MsgBox("Vous n'avez pas sélectionné de copie (CC)" & Chr(10) & _
'"Voulez-vous continuer ?", vbYesNo + vbQuestion, "Personne en copie")
'Case vbNo
'Exit Sub
'End Select
'End If

'Next j
'*********************************************************

For i = 0 To nb

If ListBox1.Selected(i) Then
'apparement la 1ere colonne est 0
'd'ou column(2,i) pour chercher la valeur de la 3eme colonne
listdest = listdest & ";" & ListBox1.Column(2, i)
End If

If ListBox2.Selected(i) Then
listcop = listcop & ";" & ListBox2.Column(2, i)
End If

Next i

'on retire le premier ; de la ligne si il contient qqchose
If listdest <> "" Then
listdest = Right(listdest, Len(listdest) - 1)
End If

If listcop <> "" Then
listcop = Right(listcop, Len(listcop) - 1)
End If

nb2 = ListBox3.ListCount - 1
For i = 0 To nb2
If ListBox3.Selected(i) Then
Sheets("feuil1").Range("c" & i + 4) = listdest
Sheets("feuil1").Range("d" & i + 4) = listcop
End If

'*********************************************************
'on contrôle qu'un mail à bien été selectionné
'If ListBox3.Selected(i) = False Then
'MsgBox "Veuillez sélectionner un mail !", vbCritical, "Faites une sélection"
'Exit Sub
'End If
'*********************************************************

Next i

'*********************************************************
'on choisit notre cellule de destination
'on définit la cellule en fonction de la selection
'de la listbox 3
'r = ListBox3.ListIndex
'Sheets("feuil1").Range("c" & r + 4) = listdest
'Sheets("feuil1").Range("d" & r + 4) = listcop

'si on choisit une cellule précise on fait simplement
'Sheets("feuil1").Range("c4") = listdest
'Sheets("feuil1").Range("d4") = listcop

'on peut effacer les données des liste box comme ci-dessous
'MaBoite.ListBox1.Clear
'*********************************************************


Unload MaBoite
End Sub


Private Sub CommandButton1_Click()


Private Sub CommandButton_Annuler_Click()
Unload MaBoite
End Sub


Private Sub ToggleButton1_Click()

Dim i, nb As Integer
nb = ListBox1.ListCount - 1

For i = 0 To nb 'a la place de nb on pourrait mettre directement ListBox1.ListCount - 1
If ToggleButton1 = True Then
ListBox1.Selected(i) = True
Else: ListBox1.Selected(i) = False
End If
Next i

End Sub

Private Sub ToggleButton2_Click()

Dim i, nb As Integer
nb = ListBox2.ListCount - 1

For i = 0 To nb 'a la place de nb on pourrait mettre directement ListBox2.ListCount - 1
If ToggleButton2 = True Then
ListBox2.Selected(i) = True
Else: ListBox2.Selected(i) = False
End If
Next i

End Sub


Private Sub userform_initialize()

Dim TabTemp, donnee As Variant
Dim x, y As Integer

y = Range("A4").End(xlDown).Row
donnee = Range("A4:E" & y).Value

ListBox3.ColumnCount = 5
ListBox3.List() = donnee

x = Sheets("mail").Cells(2, 1).End(xlDown).Row

'Chargement d'une plage de cellules dans la variable TabTemp
'si on est sur l'autre feuille
'TabTemp = Range("A1:C" & x).Value

TabTemp = Sheets("mail").Range("A2:C" & x).Value

ListBox1.ColumnCount = 3
ListBox1.List() = TabTemp

ListBox2.ColumnCount = 3
ListBox2.List() = TabTemp

End Sub

Merci à tous pour vos réponses.

/!\ rrrrrrrrrrrrr /!\
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
3
Merci
Salut

Prends l'habitude de bien choisir la catégorie de ta question, stp.

Tout ce code ... penses-tu que qqun ait le courage de le lire ?
Autre habitude à prendre : Utilise le coloriage syntaxique (3eme icone à droite) pour coller du code = plus facile à lire.

MaBoite.Show
Comment est déclaré 'MaBoite' ?
On suppose qu'il s'agit d'une forme ?

Utilisation propre des formes (instanciation) :
Dim maForme As MaBoite
Set maForme = New MaBoite
maForme.Show
Set maForme = Nothing

Lorsqu'une erreur de compilation arrive dans le code d'une forme ET que cette erreur n'est pas gérée, l'erreur est signalée sur la ligne d'appel, ici, le .Show
Il te faut demander une compilation de ton programme (menu Débogage) pour découvrir et corriger le problème. C'est une habitude à prendre avant chaque lancement.

Toujours parmi les règles de base :
Dim selection, selection2, selection3 As Boolean
ne signifie pas que chaque variable sera de type Boolean. Seule 'selection3' le sera, les deux premières seront de type Variant.
Ça marchera quand même, mais tu obliges le compilateur à faire les conversions à ta place et, un jour ou l'autre, tu auras un bug que tu auras du mal à trouver.
Il faut déclarer chaque type sur chaque variable
Dim selection As Boolean, selection2 As Boolean, selection3 As Boolean


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 142 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack