Erreur définie par l'application ou l'objet
Bonjour!
J'ai un petite base de données en Excel dans laquelle j'ai une liste de personnes identifiées chacune par un code. J'ai fait un UserForm pour la modification des information de cette liste de personnes. La liste des codes est récupérée dans un comboBox du UserForm. Une fois le code choisi, un bouton permet de filtrer la table et de récupérer la personne concernée, les informations initialement saisies sont renseignées dans les autres TexteBox du Userform.
Le problème c'est que le code marche seulement quand la feuille qui contient la liste est active, sinon je reçois l’erreur "Erreur définie par l'application ou l'objet"
Voici mon code (code du bouton) :
Private Sub CommandButton_OK_Click()
critereCode = ComboBox_Code.Value
If critereCode <> "" Then
ThisWorkbook.Worksheets("listepersonnes").Range("A1").AutoFilter Field:=1, Criteria1:=critereCode
End If
no_ligne = ThisWorkbook.Worksheets("listepersonnes").Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells(1, 1).Row
TextBox_CodeP = Sheets("listepersonnes").Cells(no_ligne, 1).Value
TextBox_Nom = Sheets("listepersonnes").Cells(no_ligne, 2).Value
TextBox_Prenom = Sheets("listepersonnes").Cells(no_ligne, 3).Value
TextBox_Age = Sheets("listepersonnes").Cells(no_ligne, 4).Value
TextBox_Fonction = Sheets("listepersonnes").Cells(no_ligne, 5).Value
TextBox_Sexe = Sheets("listepersonnes").Cells(no_ligne, 6).Value
End SubPuis-je avoir de l'aide pour corriger l'erreur?
Bonjour,
A priori l'erreur ne vient pas de cette macro, puisque la feuille est systématiquement précisée. D'ailleurs, l'utilisation de With...End With serait bienvenue pour éviter les répétitions.
Il faudrait transmettre l'intégralité des codes impliqués dans l'UserForm qui pose problème.
Bonjour Pedro22
Merci pour la réponse ! J'ai pris en compte le conseil et en cherchant davantage sur d'autres forum j'ai ceci qui marche bien
Private Sub CommandButton_OK_Click()
FeuilleCourante = ActiveSheet.Name ' Mémorise la feuille courante
Application.ScreenUpdating = False
With Worksheets("listepersonnes") ' Le With évite de répéter sans cesse le nom de la feuille,
.Select ' Sélectionne la feuille "listepersonnes"
critereCode = ComboBox_Code.Value
If critereCode <> "" Then
.Range("A1").AutoFilter Field:=1, Criteria1:=critereCode
End If
no_ligne = .Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells(1, 1).Row
TextBox_CodeP = .Cells(no_ligne, 1).Value
TextBox_Nom = .Cells(no_ligne, 2).Value
TextBox_Prenom = .Cells(no_ligne, 3).Value
TextBox_Age = .Cells(no_ligne, 4).Value
TextBox_Fonction = .Cells(no_ligne, 5).Value
TextBox_Sexe = .Cells(no_ligne, 6).Value
End With
Sheets(FeuilleCourante).Select ' Retourne sur la feuille initiale
Application.ScreenUpdating = True
End SubMerci pour l'assistance