IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur d'exécution 91 -> mais pas d'erreur en pas à pas détaillé


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Contremaître du Service technique
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contremaître du Service technique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut Erreur d'exécution 91 -> mais pas d'erreur en pas à pas détaillé
    Bonjour,

    je vais essayer d'être le plus complet possible.

    J'ai commencé le VBA il y a peu, essayez d'être indulgent si mes methodes ne sont pas les plus optimums...

    j'ai créé un UserForm pour l'encodage les des clés utilisée dans chaque locaux de chaque bâtiment.

    Lorsque j'ai eu fini, j'ai exécuté un pas à pas détaillé sans avoir de message d'erreur. C'est alors que j'ai testé en condition réel et Paf => Erreur d'exécution '91'.

    Le débogage me ramène à la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NumLigne = ActiveSheet.Columns(2).Find(Recherche).Row
    Voici le code complet pour la parti concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Private Sub Ajouter_Bouton_Click()
    '--------------------------------------------------------------------------------------------------------------------------------
                                                                                             'Chercher si le local est déjà existant
     
            'Définition des variables du champ de recherche
     
                Dim Recherche As String
                Dim NumLigne As Integer
     
            'On définit la valeur de Recherche
     
                Recherche = TextBox_Local.Text
     
            'On active la feuille "Matériel en prêt"
     
                Worksheets("Localisation de clés").Activate
     
            'On trouve la ligne qui correspond à la valeur recherche et on enregistre le numéro dans la variable "NumLigne"
     
                NumLigne = ActiveSheet.Columns(2).Find(Recherche).Row
     
             'Si la valeur de "Recherche" n'existe pas encore dans le document alors Recherche = ""
             'Si NumLigne à une valeur, alors MsgBox => Voulez-vous l'éffacer?
     
                    If IsEmpty(NumLigne) = True Then Recherche = "" Else
                    If Recherche <> "" And NumLigne <> 0 Then RetourMsgBox = MsgBox("Le local existe, voulez-vous l'éffacer ?", vbYesNo, "Local existant")
                    If RetourMsgBox = vbYes Then Range("A" & NumLigne & ":" & "AA" & NumLigne).Select
                    If RetourMsgBox = vbYes Then Selection.ClearContents
                    If RetourMsgBox = vbNo Then ComboBox_Batiment.Value = ""
                    If RetourMsgBox = vbNo Then TextBox_Local.Value = ""
     
                    Application.CutCopyMode = False
     
    '--------------------------------------------------------------------------------------------------------------------------------
                                                                                    'On vérifie que les données minimums sont encodées
            If ComboBox_Batiment = "" Then _
            MsgBox "Veuillez selectionner un batiment", vbCritical, "Localisation manquante"
     
            ComboBox_Batiment.SetFocus
     
            If TextBox_Local = "" Then _
            MsgBox "Veuillez selectionner un local", vbCritical, "Localisation manquante"
     
            TextBox_Local.SetFocus
     
    '--------------------------------------------------------------------------------------------------------------------------------
                                                                            'On enregistre les données dans la première ligne vide
            'On enregistre les données
     
                ActiveSheet.Cells(NumLigne, 1) = ComboBox_Batiment.Text
                ActiveSheet.Cells(NumLigne, 2) = TextBox_Local.Text
     
                If CheckBox_PorteEntree.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 3) = Text_NumPorteEntree.Text
     
                If CheckBox_PorteEntree2.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 4) = Text_Local2.Text
                    ActiveSheet.Cells(NumLigne, 5) = Text_NumPorteEntree2.Text
     
                If CheckBox_Armoire1.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 6) = Text_Armoire1.Text
                    ActiveSheet.Cells(NumLigne, 7) = Combo_Type1.Text
                    ActiveSheet.Cells(NumLigne, 8) = Combo_TypeOuverture1.Text
                    ActiveSheet.Cells(NumLigne, 9) = Text_Note1.Text
     
                If CheckBox_Armoire2.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 10) = Text_Armoire2.Text
                    ActiveSheet.Cells(NumLigne, 11) = Combo_Type2.Text
                    ActiveSheet.Cells(NumLigne, 12) = Combo_TypeOuverture2.Text
                    ActiveSheet.Cells(NumLigne, 13) = Text_Note2.Text
     
                If CheckBox_Armoire3.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 14) = Text_Armoire3.Text
                    ActiveSheet.Cells(NumLigne, 15) = Combo_Type3.Text
                    ActiveSheet.Cells(NumLigne, 16) = Combo_Type3.Text
                    ActiveSheet.Cells(NumLigne, 17) = Text_Note3.Text
     
                If CheckBox_Armoire4.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 18) = Text_Armoire4.Text
                    ActiveSheet.Cells(NumLigne, 19) = Combo_Type4.Text
                    ActiveSheet.Cells(NumLigne, 20) = Combo_Type4.Text
                    ActiveSheet.Cells(NumLigne, 21) = Text_Note4.Text
     
                If CheckBox_Armoire5.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 22) = Text_Armoire5.Text
                    ActiveSheet.Cells(NumLigne, 23) = Combo_Type5.Text
                    ActiveSheet.Cells(NumLigne, 24) = Combo_Type5.Text
                    ActiveSheet.Cells(NumLigne, 25) = Text_Note5.Text
     
                If CheckBox_Armoire6.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 26) = Text_Armoire6.Text
                    ActiveSheet.Cells(NumLigne, 27) = Combo_Type6.Text
                    ActiveSheet.Cells(NumLigne, 28) = Combo_Type6.Text
                    ActiveSheet.Cells(NumLigne, 29) = Text_Note6.Text
     
                If CheckBox_Armoire7.Value = True Then _
                    ActiveSheet.Cells(NumLigne, 30) = Text_Armoire7.Text
                    ActiveSheet.Cells(NumLigne, 31) = Combo_Type7.Text
                    ActiveSheet.Cells(NumLigne, 32) = Combo_Type7.Text
                    ActiveSheet.Cells(NumLigne, 33) = Text_Note7.Text
     
                ActiveSheet.Cells(NumLigne, 38) = Text_Autres.Text
     
            'On ferme l'UserForm
     
                Inventaire_Locaux.Hide
     
    End Sub

    Où ais-je commis un impair?

    Merci d'avance

  2. #2
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Ce n'est pas très recommandé, mais essayez de tester avec "OnError Resume Next" juste avant la ligne incriminée ! Si ça marche, laissez l'instruction, sinon, il faut la supprimer!

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Nous ne sommes pas dans la section VBA.
    Cependant :
    La méthode Find renvoie un objet (s'il existe) Range
    Si l'objet n'existe pas, on ne saurait utiliser sa propriété Row
    Si un objet n'existe pas, il est Nothing (Is Nothing)
    Tester donc d'abord l'existence, en se rappelant qu'on affecte un objet à une variable par l'instruction Set. Et seulement s'il existe (If Not Is Nothing) --->> en utiliser la propriété Row.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Un nouvel exemple qui montre que la simple consultation de l'aide VBA pourrait résoudre une grande partie des demandes postées ici.
    Lire ceci (en particulier l'exemple qui est donné) : https://msdn.microsoft.com/fr-fr/VBA...d-method-excel

  5. #5
    Membre habitué
    Homme Profil pro
    Contremaître du Service technique
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contremaître du Service technique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut Merci
    Un grand merci pour vos explication...

    unparia => Graçe a toi, je comprend mieux la fonction Find

    Menhir => Il est vrai que je n'ai pas penser à regarder dans l'aide.

    Zekraoui_Jakani => J'ai tenté le "OnError Resume Next" mais la ligne restait en rouge donc impossible à tester.

    Graçe à vous, j'ai résolu avec la solution ci dessous...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            'On active la feuille ("Localisation de clés")
     
                Worksheets("Localisation de clés").Activate
     
            'On trouve la ligne qui correspond à la valeur recherche et on enregistre le numéro dans la variable "NumLigne"
     
                 NumLigneVide = Worksheets("Localisation de clés").Columns(1).Find(What:="").Row
     
            'On trouve la ligne qui correspond à la valeur recherche et on enregistre le numéro dans la variable "NumLigne"
     
                 With Worksheets("Localisation de clés").Columns(2)
                    Set NumLigne = .Find(Recherche)
                        If Not NumLigne Is Nothing Then
                            NumLigne2 = NumLigne.Row
                                RetourMsgBox = MsgBox("Le local existe, voulez-vous l'éffacer ?", vbYesNo, "Local existant")
                                If RetourMsgBox = vbYes Then Range("A" & NumLigne2 & ":" & "AA" & NumLigne2).Select
                                If RetourMsgBox = vbYes Then ActiveCell.ClearContents
                                If RetourMsgBox = vbNo Then ComboBox_Batiment.Clear
                                If RetourMsgBox = vbNo Then TextBox_Local.Value = ""
                        Else
                        NumLigne2 = NumLigneVide
                        End If
     
                End With

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2016, 09h22
  2. [PHP 5.3] Exécution de page annulée, mais pas d'erreur
    Par brunoperel dans le forum Langage
    Réponses: 1
    Dernier message: 21/04/2010, 13h58
  3. Réponses: 1
    Dernier message: 30/07/2009, 17h31
  4. Réponses: 3
    Dernier message: 06/05/2009, 09h20
  5. Réponses: 7
    Dernier message: 12/08/2005, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo