Gestion erreur d'éxécution '91'

Résolu/Fermé
ISALEX02 Messages postés 2 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 27 janvier 2013 - 26 janv. 2013 à 22:29
ISALEX02 Messages postés 2 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 27 janvier 2013 - 27 janv. 2013 à 21:10
Bonjour à tous,

je débute en VBA et si j'arrive à obtenir quelques résultats, là je suis bloquée sur une erreur ...
J'explique mon cas :
J'ai une base Excel d'employés d'un côté (sTableauEffectifs) et un fichier actif pour gérer ces employés (sTableauMob). Lorsque je saisis un Numéro (matricule) dans une cellule (colonne spécifique et format spécifique que j'arrive à tester) de ma feuille / classeur excel actif, je vais lire les informations liées à ce numéro dans un ma base effectif et je les récupère dans ma feuille active sur la ligne où je suis.
Là où cela se complique pour moi, c'est quand ce numéro n'existe pas dans ma base ... J'obtiens le fameux message erreur d'éxécution '91'

J'ai réussi à placer des tests sur d'autres éléments qui peuvent arrêter ma macro, mais dans ce cas précis je n'y arrive pas ... J'ai vu énormement de choses sur le sujet sur Internet mais sans trouver mon bonheur où je n'ai pas compris comment l'adapter à mon problème.
Voici ma macro, j'y laisse en commentaire à la fin un de mes tests qui ne fonctionne pas :

Sub employe()

Dim sPath, sTableauMob, sTableauEffectifs, sNomCollab, sPrenomCollab, sNumAncienPoste As String
Dim sDomaineActuel, sSousDomActuel, sMatriNomManagerActuel, sMatriNomRRHActuel As String
Dim lMat As Long

'On Error GoTo errorHandler

lMat = 0
Application.ScreenUpdating = False

'Initialisation des variables (nom des classeurs & chemin d'enregistrement)
sPath = ActiveWorkbook.Path
sTableauMob = ActiveWorkbook.Name
lMat = ActiveCell.Value
Workbooks.Open Filename:=ThisWorkbook.Path & "\effectifs_mensuels_rp.xls"
sTableauEffectifs = ActiveWorkbook.Name

'On sélection le fichier de suivi des mobilités
Windows(sTableauMob).Activate
'Application.Goto Reference:="D"

'On vérifie que la cellule sélectionnée fait bien partie de la colonne matricule et est au format "1123456"
If ActiveCell.Column <> 4 Then
'Then
'Else
MsgBox "La cellule sélectionnée doit être dans la colonne D.", vbCritical, "Attention !"
Exit Sub
End If
If ActiveCell.Row <= 7 Then
'Else
MsgBox "La cellule sélectionnée doit être dans la colonne D.", vbCritical, "Attention !"
Exit Sub
End If
If lMat >= 1000000 And lMat <= 1999999 Then
Else
MsgBox "Le matricule doit être au format 1123456.", vbCritical, "Attention !"
Exit Sub
End If
'Else
'MsgBox "Le matricule doit être au format 1123456.", vbCritical, "Attention !"
'End If

'on cherche la colonne matricule dans le fichier effectifs
Windows(sTableauEffectifs).Activate
Rows("1:1").Select
Selection.Find(What:="matricule", After:=ActiveCell).Activate
'on la sélectionne
ActiveCell.EntireColumn.Select
'et on y cherche le matricule saisi dans le tableau de suivi des mobilités et on gère l'erreur de matricule mal saisi ou inexistant
Selection.Find(What:=lMat, After:=ActiveCell).Activate

'on récupère les datas du collaborateur
sNomCollab = ActiveCell.Offset(0, 1).Value
sPrenomCollab = ActiveCell.Offset(0, 2).Value
sDomaineActuel = ActiveCell.Offset(0, 18).Value
sSousDomActuel = ActiveCell.Offset(0, 19).Value
sMatriNomManagerActuel = ActiveCell.Offset(0, 20).Value & " - " & ActiveCell.Offset(0, 21).Value
sMatriNomRRHActuel = ActiveCell.Offset(0, 5).Value & " - " & ActiveCell.Offset(0, 6).Value
sNumAncienPoste = ActiveCell.Offset(0, -6).Value

'on deverse les infos dans le fichier de suivi des mobilités
Windows(sTableauMob).Activate
ActiveCell.Offset(0, 1) = sNomCollab
ActiveCell.Offset(0, 2) = sPrenomCollab
ActiveCell.Offset(0, 3) = sDomaineActuel
ActiveCell.Offset(0, 4) = sSousDomActuel
ActiveCell.Offset(0, 5) = sMatriNomManagerActuel
ActiveCell.Offset(0, 7) = sMatriNomRRHActuel
ActiveCell.Offset(0, 31) = sNumAncienPoste

'On masque les msg systemes
Application.DisplayAlerts = False
'On referme le classeur source
Workbooks("effectifs_mensuels_rp.xls").Close

Application.ScreenUpdating = True
Application.DisplayAlerts = True

'Mes essais pour gérer un matricule inexistant
'errorHandler:
'If Err.Number = 96 Then
'MsgBox "Matricule inexistant dans la base.", vbCritical, "Erreur..."
'Exit Sub
'End If
'On Error GoTo 0

End Sub


Cela fait mainternant des heures que je suis sur le sujet ... Au secours ! ;-))
Merci par avance pour votre aide.

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 janv. 2013 à 08:39
Bonjour,

'et on y cherche le matricule saisi dans le tableau de suivi des mobilités et
'on gère l'erreur de matricule mal saisi ou inexistant
Dim CelIMat As Range
Set CelIMat = Selection.Find(What:=lMat, After:=ActiveCell)
'Test si existe
If CelIMat Is Nothing Then
  'Pas trouve
   Exit Sub
End If
'Pour ne pas devoir modifier la suite
Cells(CelIMat.Row, CelIMat.Column).Activate


Bonne suite
1
ISALEX02 Messages postés 2 Date d'inscription samedi 26 janvier 2013 Statut Membre Dernière intervention 27 janvier 2013
27 janv. 2013 à 21:10
Bonjour et merci beaucoup pour votre aide. Cela répond pleinement à mon problème et j'étais bien loin de trouver.
Bonne soirée !
0