Autres Erreur sur code vba

koadima

XLDnaute Junior
Bonjour chers tous
J'ai suivi pas à pas un tutoriel vidéo que j'ai téléchargé. J'ai dans mon travail crée un combobox qui récupère la liste des écoles et des textbox qui s'occupent des notes des élèves.
cependant je n'arrive pas a activer les boutons de commande car une erreur revient toujours
SVP, aidez-moi avec le bon code correspondant.
 

Pièces jointes

  • TABLEAU SYNOPTIQUE - Copie.xlsm
    55.9 KB · Affichages: 18

koadima

XLDnaute Junior
Bouton formulaire.png
débogage de l'erreur du bouton formulaire
 

TooFatBoy

XLDnaute Barbatruc
Tu peux nous montrer la macro UserForm_Initialise, qui se trouve dans le UserForm en question, s'il te plait ?

Quand je vois comment s'affiche ton "(Général)", je me dis que tu as peut-être bien un problème avec les accents, et vu que tu as des noms de variables avec des accents, ça risque de mettre le bazar.
 
Dernière édition:

koadima

XLDnaute Junior
Voici tout le code

'-----------------------
'Initialisation UserForm
'-----------------------
Private Sub UserForm_Initialize()
Dim TblÉcoles As ListObject
Dim TabÉcoles() As Variant
Dim p As Integer

'Set ListObjects
Set TblÉcoles = Range(NomTableauÉcoles).ListObject
Set TblBD = Range(NomTableauBD).ListObject

'Chargement de la ComboBox
TabÉcoles = TblÉcoles.DataBodyRange.Value
Me.ComboBox1.List = TabÉcoles

'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD

'Active la feuille BD
With ThisWorkbook.Worksheets(NomFeuilleBD)
.Activate
End With

'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub

'------------------
'ComboBox ComboBox1
'------------------
Private Sub ComboBox1_Change()
Dim LigneÉcole As Long
Dim p As Integer
Dim Réponse As Variant

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Value = TblBD.DataBodyRange(LigneÉcole, p + 1).Value
Next p

'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> n'est pas présente dans la feuille <" & NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Effacer le formulaire (OK) ou bien garder les valeurs actuelles (Annuler) ?", vbOKCancel + vbQuestion)
If Réponse = vbOK Then
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Value = ""
Next p
End If
End If
End Sub

'------------------
'Bouton ENREGISTRER
'------------------
Private Sub ENREGISTRER_Click()
Dim LigneÉcole As Long
Dim p As Integer
Dim Réponse As Variant

'Contrôle contenu de la ComboBox1
If Not ContrôleComboBox1 Then Exit Sub

'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> est déjà enregistrée." & vbCrLf & _
"Les valeurs du formulaire remplaceront les valeurs présentes dans la feuille <" & _
NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Continuer ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub

'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
Réponse = MsgBox("L'école <" & Me.ComboBox1.Value & "> n'est pas encore enregistrée." & vbCrLf & _
"Elle sera créée dans la feuille <" & NomFeuilleBD & ">." & vbCrLf & vbCrLf & _
"Continuer ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub

TblBD.ListRows.Add LigneÉcole
End If

'------------------------------------------------------
'Enregistrement des valeurs du formulaire en feuille BD
'------------------------------------------------------
TblBD.DataBodyRange(LigneÉcole, 1).Value = ComboBox1.Value

For p = 1 To NombreTextBox
TblBD.DataBodyRange(LigneÉcole, p + 1).Value = Me.Controls("TextBox" & p).Value
Next p

'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD

'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub

'--------------
'Bouton EFFACER
'--------------
Private Sub EFFACER_Click()
Dim p As Integer

'Efface les données du formulaire
For p = 1 To NombreTextBox
Me.Controls("TextBox" & p).Text = ""
Next p

'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub

'--------------
'Bouton QUITTER
'--------------
Private Sub QUITTER_Click()
Unload Me
End Sub

'----------------
'Bouton SUPPRIMER
'----------------
Private Sub SUPPRIMER_Click()
Dim Réponse As Variant
Dim LigneÉcole As Long

'Contrôle contenu de la ComboBox1
If Not ContrôleComboBox1 Then Exit Sub

'-----------------
'Si l'école existe
'-----------------
If ÉcoleExiste(LigneÉcole) Then
Réponse = MsgBox("Confirmer la suppression de l'école <" & Me.ComboBox1.Value & "> ?", vbOKCancel + vbQuestion)
If Réponse = vbCancel Then Exit Sub
TblBD.ListRows(LigneÉcole).Delete

'Affiche le total des lignes de la BD
Call AfficheTotalLignesBD

MsgBox "L'école <" & Me.ComboBox1.Value & "> a été supprimé de la feuille <" & NomFeuilleBD & ">."

'-----------------------
'Si l'école n'existe pas
'-----------------------
Else
MsgBox "L'école <" & Me.ComboBox1.Value & "> n'existe pas dans la feuille <" & NomFeuilleBD & ">."
End If

'Set le Focus en ComboBox
Me.ComboBox1.SetFocus
End Sub

'---------------------------------
'Affiche le total des lignes en BD
'---------------------------------
Sub AfficheTotalLignesBD()
If TblBD.DataBodyRange Is Nothing Then
TextBoxTotalLignesBD.Text = 0
Else
TextBoxTotalLignesBD.Text = TblBD.DataBodyRange.Rows.Count
End If
End Sub

'----------------------------------------------
'Contrôle que la valeur en ComboBox1 est valide
'----------------------------------------------
Function ContrôleComboBox1() As Boolean
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "L'école choisie ne fait pas partie de la liste des écoles."
Else
ContrôleComboBox1 = True
End If
End Function

'--------------------------------------------
'Retourne la ligne de l'école de la ComboBox1
'dans le paramètre et True si l'école existe
'--------------------------------------------
Function ÉcoleExiste(ByRef LigneÉcole As Long) As Boolean
'Aucune école n'existe en feuille BD
If TblBD.DataBodyRange Is Nothing Then
ÉcoleExiste = False
LigneÉcole = 1
Else
'Cherche l'école de la ComboBox dans la feuille BD
For LigneÉcole = 1 To TblBD.DataBodyRange.Rows.Count
If TblBD.ListColumns("ÉCOLES").DataBodyRange(LigneÉcole).Value = ComboBox1.Value Then Exit For
Next LigneÉcole

If LigneÉcole <= TblBD.DataBodyRange.Rows.Count Then ÉcoleExiste = True
End If
End Function
 

Dudu2

XLDnaute Barbatruc
@Marcel32,
Le UserForm est dimensionné en points et l'écran en Pixels
Si tu veux convertir simplement:
VB:
    With ActiveWindow.ActivePane
        PointToPixel = (.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72
        PixelToPoint = 1 / PointToPixel
    End With
En général 1 point = 1.66666 pixels et 1 pixel = 0.666666 points
 

TooFatBoy

XLDnaute Barbatruc
Ça sert à rien de mettre le code en Post puisqu'il est dans le fichier.
Si, comme expliqué plus haut je voulais voir comment il s'affichait chez lui donc je voulais voir une copie d'écran du début de la macro.


Pardon de polluer un peu le fil de discussion, mais je m'interroge toujours sur la taille du UserForm à l'écran...
Pourquoi chez moi s'affiche-t-il sur beaucoup moins d'un car du moniteur ?
Est-ce que la taille d'un point en nombre de pixels est une constante, ou est-ce que ça dépend de la résolution de l'écran ?


@koadima : vas-tu enfin nous dire si tu es sous PC, Mac, iPd, autre ??? :D
 

TooFatBoy

XLDnaute Barbatruc
Oui, j'ai vu. ;)

Si tu mets le curseur d'édition sur le nom de la macro "UserForm_Initialize" et que tu appuis sur la touche <F5>, il se passe quoi ?


[edit]
Je vois que Dudu2 est présent, donc je le laisse terminer de t'aider.
D'autant plus que moi je ne vois pas du tout d'où peux venir le problème. :D
Mais en attendant, si j'étais toi (mais je ne suis pas toi), j'enlèverais tous les accents dans les noms des variables.
[/edit]
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Je pense qu'il va se passer la même chose.

Franchement je ne sais pas pourquoi ça plante. Le test fait sur ce fichier par un utilisateur d'Office 2021 ici fonctionne sans problème. Par contre je ne sais pas s'il est sur W11.

Reste plus que Teamviewer et une conf téléphonique (n° de téléphone en message privé).

Essaie ce fichier TABLEAU SYNOPTIQUE Test 1
 

Pièces jointes

  • TABLEAU SYNOPTIQUE Test 1.xlsm
    61.1 KB · Affichages: 1
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui j'y ai pensé. Mais je ne vois pas ce qui pourrait jouer. A part les accents (d'où la question MAC).
Je suis en train de faire une version Test 2 sans accents dans le code et les noms de tableaux.
Mais il y a des noms comme Débéré Talata où ce sont bien des accents français utilisés.

On va attendre le résultat du fichier TEST 1.
 

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 467
Membres
103 226
dernier inscrit
smail12