VBA - Message d'erreur lié à la méthode ou des données introuvables
Bonsoir tout le monde.
Ultra novice ne VBA, je reçois systématiquement le message "membre de méthode ou de données introuvables".
Voici le code et l'élément pour lequel je reçois une erreur
Sub age()
'
' age Macro
'
' Touche de raccourci du clavier: Ctrl+g
'
effacement
Dim datenais As Date
Cells(1, 1) = "Nom"
Cells(1, 2) = "Date naissance"
Cells(1, 3) = "Age"
Cells(1, 4) = "Status"
Cells(1, 5) = "Genre"
n = InputBox("Pour combien de personnes désirez-vous calculer l'âge ?")
For i = 2 To 5
Userformage.Show
Cells(i, 1) = Userformage.Nom.Text
datenais = Userformage.datenais.Text
Cells(i, 2) = datenais
Cells(i, 5) = Userformage.Genre.Text
Cells(i, 3) = fctage(datenais)
Select Case Cells(i, 3)
Case Is > 65
Cells(i, 4) = "Pensionné"
c = c + 1
a = a + Cells(i + 3)
Case 2 To 18
Cells(i, 4) = "A l'école"
Case Else
Cells(i, 4) = "En activité"
End Select
If Max = 0 Or Cells(i, 3) > Max Then
Max = Cells(i, 3)
End If
If Min = 0 Or Cells(i, 3) < Min Then
Min = Cells(i, 3)
nommin = Cells(1, 1)
End If
Unload Userformage
Next i
adjust
End Sub
J'ai beau chercher sur les forums, je ne parviens pas à trouver d'où vient mon erreur. Est-ce que quelqu'un pourrait m'aider à y voir plus clair s'il vous plaît ? Merci
Salut oufti,
oufti valèt, mais tout ceci devrait être traité DANS l'Userform :
Cells(i, 1) = Userformage.Nom.Text
datenais = Userformage.datenais.Text
Cells(i, 2) = datenais
Cells(i, 5) = Userformage.Genre.Text
Cells(i, 3) = fctage(datenais)
Essaye de corriger en adressant directement ces cellules depuis l'Userform.
Quant à la boucle du nombre de cas à calculer, envoie ton fichier ET l'Userform.
A+
Bonsoir, Re Curulis !
Tu ne donnes pas suffisamment d'informations pour que l'on puisse détecter d'où vient cette erreur. Tu ne précises même pas où elle se manifeste, et ne fournit aucun fichier...
Par contre tu nous infliges un fragment de code sans le mettre sous balises Code (ce qui est le minimum de déférence qu'on est en droit d'attendre de façon à pouvoir lire avec un minimum de confort... Intéresse-toi au bouton </>
qui permet de mettre le code sous balises, et veille à le faire systématiquement, on t'en sauras gré).
Code qui de plus est non indenté (lorsqu'il l'est la mise sous balises conserve l'indentation) et un code bien indenté est lu facilement, contrairement à du code non indenté...
Je note aussi qu'à part une toutes tes variables ne sont pas déclarées... Je conseille de déclarer toutes ses variables, et toujours en tête de procédure.
Toutes tes expressions de type Cells... ne sont pas qualifiées, c'est à dire qu'elle ne réfèrent pas explicitement à la feuille dans laquelle elle se trouve, se qui altère la fiabilité du code et ralentit son exécution...
Tu as des répétition qui devraient être évitées par l'utilisation d'une instruction With... End With, qui outre l'économie d'écriture qu'elle procure est un facteur d'accélération de l'exécution. A utiliser sans restriction.
Je ne suivrai pas par contre le conseil de Curulis en ce qui concerne le renvoi au niveau du Userform des affectations réalisées... Je pense au contraire que c'est un aspect positif de ton code ce traitement en boucle par la procédure appelante, qui est une technique éprouvée et même celle qui était le plus recommandée autrefois lors de l'utilisation d'un Userform.
Evidemment, cela suppose que tu n'aies pas déchargé (Unload) le Userform en le quittant lors de la validation de la saisie, mais seulement masqué (Hide), sans quoi ton erreur s'expliquerait d'elle-même, si le Userform n'est plus, plus moyen d'accéder aux valeurs qui auront disparues de la mémoire. Je suppose que tu l'as vérifié, mais au cas où, il faut voir ça sans délai.
Je trouve moins élégant d'Unloader le Userform en fin de boucle, il aurait été plus judicieux d'effacer les contrôles avant de le réafficher, ce qui aurait pu d'ailleurs s'avérer plus rapide...
Pour le reste, on ne voit que des appels de procédures dont on ne connait pas le code, et on ne connait pas non plus le contexte en l'absence de fichier...
Cordialement.