Initiation Module de classe

cathodique

XLDnaute Barbatruc
Bonjour,

Afin de m'initier aux modules de classe, j'ai recherché sur le net des exemples assez simple.

Au fil de mes recherches, je suis tombé sur une vidéo sur youtube.

Je l'ai visionné tout en reprenant sur un fichier toutes les étapes. Le monsieur a proposé 2 codes pour saisir ID, Nom et prenom. le but du premier est d'évité à l’utilisateur de saisir des ID en double (via inputbox), ceci pour le 1er code.

Pour le second, qui plante chez moi, évite aussi à l’utilisateur de saisir aussi en double nom et prenom (un message avertit et donne l'ID de la personne). Je voudrai savoir pourquoi la ligne repérée par 3 astérisques plante (propriété ou méthode non gérée par cet objet).

J'ai trouvé que son utilisation était assez contraignante pour un utilisateur. En effet, à l'ouverture de l'inpubox, il faut mettre "y" pour continuer, ensuite saisir l'id et valider, ensuite saisir le nom et valider, ensuite saisir prenom et valider puis si on veut insérer une autre personne répondre par "y" ou "n" pour que le processus s'arrête.

Je voudrais remplacer l'inputbox par un userform. Dans lequel l'id est automatisé (partie réalisée), reste code pour vérifier que pa personne existe ou non.

Je suis un peu dérouté le code plante
VB:
Sub addEmployee2()
'Procedure plante sur la ligne avec asterisques ***
'erreur: propriété ou méthode non gérée par cet objet
''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim colEmployees As New Collection
    Dim recEmployee As New ClsEmployee
    Dim erow As Long
    Dim answer As String
    Dim foundID As Boolean
    Dim r As Long
    Do
        answer = InputBox("Do you wish to enter a new record?Please enter y or n only!")
        If answer = "n" Then Exit Sub
        erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        recEmployee.ID = InputBox("Enter Employee ID")
        If ActiveSheet.Range("A1").Resize*(erow - 1, 1).Find(what:=recEmployee.ID, LookAt:=xlWhole) Is Nothing Then    '***
            recEmployee.FirstName = InputBox("Enter First Name")
            recEmployee.LastName = InputBox("Enter Last Name")
            foundID = 0
            For r = 1 To erow - 1
                If Cells(r, 2) = recEmployee.FirstName And Cells(r, 3) = recEmployee.LastName Then
                    foundID = Cells(r, 1)
                    Exit For
                End If
            Next r
            If foundID = 0 Then
                Cells(erow, 1) = recEmployee.ID
                Cells(erow, 2) = recEmployee.FirstName
                Cells(erow, 3) = recEmployee.LastName
                colEmployees.Add recEmployee, recEmployee.ID
            Else
                MsgBox "Person " & recEmployee.FirstName & " " & recEmployee.LastName & " does already exist (with ID=" & foundID & ")"
            End If
        Else
            MsgBox "ID " & recEmployee.ID & " is already used. Please use a new ID!", vbInformation
        End If
    Loop
End Sub
Code:
If ActiveSheet.Range("A1").Resize*(erow - 1, 1).Find(what:=recEmployee.ID, LookAt:=xlWhole) Is Nothing Then    '***
En vous remerciant.
 

Pièces jointes

  • VBA - Exemple Module de classe.xlsm
    26.4 KB · Affichages: 24
  • VBA - Exemple Module de classe.xlsm
    26.4 KB · Affichages: 24

Bebere

XLDnaute Barbatruc
Re : Initiation Module de classe

bonjour cathodique
syntaxe de find lookin:=xlvalues,lookat:=xlwhole
ajouté du code dans userform
 

Pièces jointes

  • VBA - Exemple Module de classe.xlsm
    30.2 KB · Affichages: 33
  • VBA - Exemple Module de classe.xlsm
    30.2 KB · Affichages: 35

cathodique

XLDnaute Barbatruc
Re : Initiation Module de classe

Bonjour Gilbert_RGI, Bebere, le forum

Merci beaucoup pour votre aide.

@ Gilbert_RGI: En effet, bien souvent une petite coquille fout toute une procédure en l'air. Je me disais bien que sur la vidéo ça fonctionnait très bien.

@Bebere: ton fichier répond exactement au résultat escompté. J'ai juste effectué un test, je vais bien étudié ton code pour le comprendre et l'assimiler.

Retour après consultation du code de Bebere: Dans ton code tu utilises 2 fonctions (Evaluate et SommeProd) pour trouver si la personne existe déjà (Nom*Prenom). Malgré que ton code fonctionne, ce n'est pas exactement ce que je voulais. mon souhait est d'y arriver en utilisant le module de classe "ClsEmployee". C'est pour mon apprentissage des modules de classe.

Merci à vous. Bonne fin de journée et bon week-end.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 948
Membres
103 682
dernier inscrit
Thomas23