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 :

Problème erreur d'exécution 9 [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Problème erreur d'exécution 9
    Bonjour,

    Je suis débutant et j'ai souhaité contrôler les éléments saisis dans 12 textbox d' un USF (userform2).

    Le code ci-après fonctionne pour ce USF; en revanche si je créé un deuxième USF et que j'adapte le code aux textbox qu'il contient, le message "erreur d'exécution 9" apparaît à l'ouverture du 2ème Userform

    Malgré toutes mes recherches je ne comprends pas pourquoi.

    Quelqu'un pourrait-il m'aider ?

    Avec mes Remerciements
    Code du Module de Classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public WithEvents txtBox As MSForms.textbox
    Private Sub txtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If InStr(".,0123456789", Chr(KeyAscii)) = 0 Then
            KeyAscii = 0
            MsgBox "Vous avez saisi du texte par erreur. le caractère saisi n'est pas valide, vous devez entrer un nombre !!!", vbCritical, "ERREUR de SAISIE"
        End If
    End Sub
    Code du Userform2
    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
     
    Dim i As Integer
    Dim n As Integer
    Dim nbVirgule As Integer
    Dim nbPoint As Integer
     
    'Empêcher de saisir du texte et avertir d'une mauvaise saisie (lien avec module de classe)
    Dim txtBox(1 To 12) As New Classe1 'Pour 12 TextBox
    Private Sub UserForm_Initialize()
        Dim n, x As Integer
        Dim ctrl As Control
        'Pour les 12 premiers
        For Each ctrl In Controls
            For n = 1 To 12
                If ctrl.Name = "TextBox" & n Then
                    x = x + 1
                    Set txtBox(x).txtBox = ctrl
                End If
            Next n
        Next
     
    End Sub
     
    'Obliger à saisir toutes les cases vides lors de la validation du USF (si case vide alors mettre un zéro)
    Private Sub Cmd1_click()
     
        For i = 1 To 12
            If Me.Controls("TextBox" & i) = "" Then MsgBox "Case" & i & "vide" & vbNewLine & "si vide mettre un 0": Exit Sub
        Next i
     
    'Envoyer le contenu des textbox vers les cellules excel en acceptant les calculs avec virgules et points
        Range("A1") = Val(Replace(Me.TextBox1, ",", "."))
        Range("A2") = Val(Replace(Me.TextBox2, ",", "."))
        Range("A3") = Val(Replace(Me.TextBox3, ",", "."))
        Range("A4") = Val(Replace(Me.TextBox4, ",", "."))
        Range("A5") = Val(Replace(Me.TextBox5, ",", "."))
        Range("A6") = Val(Replace(Me.TextBox6, ",", "."))
        Range("A7") = Val(Replace(Me.TextBox7, ",", "."))
        Range("A8") = Val(Replace(Me.TextBox8, ",", "."))
        Range("A9") = Val(Replace(Me.TextBox9, ",", "."))
        Range("A10") = Val(Replace(Me.TextBox10, ",", "."))
        Range("A11") = Val(Replace(Me.TextBox11, ",", "."))
        Range("A12") = Val(Replace(Me.TextBox12, ",", "."))
     
        Label1 = Range("A13")
    End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut On n'en sait pas assez
    Bonjour.

    Il pourrait être utile que tu précises sur quelle ligne de code l'erreur est levée. Tu utilises une classe que tu as définie mais qu'on ne connaît pas.
    Bref, on n'en voit pas assez, je crois, pour t'aider.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour,

    et puis lorsqu'il s'agit de code, il serait judicieux de poster dans le forum dédié Macros et VBA Excel
    dans lequel il y a plus de chance d'y obtenir une réponse …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses

    En fait il s'agit d'un workbook sur lequel je teste le code que je souhaite ensuite intégrer à une application plus importante.

    L'erreur est levée sur la ligne de code qui permet de passer du USF 2 au USF 1 et qui est rédigé comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Cmd5_Click()
        UserForm2.Hide
        UserForm1.Show  
    End Sub
    J'ai vérifié, mais je ne vois pas d'où vient le problème.

    Mon principal problème vient surtout du fait que j'ai prévu dans le module de classe1, et dans le USF 2 le code qui permet, lorsque l'on saisit par erreur du texte dans un des 12 textbox, de faire apparaître le message suivant "Vous avez saisi du texte par erreur. le caractère saisi n'est pas valide, vous devez entrer un nombre !!!", vbCritical, "ERREUR de SAISIE".
    Ce code fonctionne avec le USF 2.

    Mais lorsque j'intègre un deuxième USF (en l'occurence "Userform1") le code ne fonctionne plus pour les 12 textbox numérotés de 13 à 24.

    Je joins le fichier afin que vous puissiez disposer de tous les éléments.
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Astuce pour trouver la ligne déclenchant l'erreur : suivre le code en mode pas à pas via la touche F8 …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour Marc-L

    Merci pour votre réponse.

    La touche F8 que je ne connaissais pas m'a permis de relever les lignes de code suivantes concernant l'Userform1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
    For Each ctrl In Controls
    For n = 13 To 24
     If ctrl.Name = "TextBox" & n Then
    x = x + 1
    Set txtBox(x).txtBox = ctrl
    Je ne comprends pas, car le même code pour les 12 textbox (1 à 12) du Userform2 fonctionne normalement.

    Merci de votre patience

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Et donc, quelle ligne déclenche l'erreur ? Quelle valeur pour chaque variable ?

    Une erreur 9 n'étant qu'une erreur de logique ou de conception …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Invité
    Invité(e)
    Par défaut Bonjour,
    comment veux tu instancier un contrôle à Set txtBox(x).txtBox = ctrl si x vaut 1 alor que ton tableau est Dim txtBox(13 To 24) As New Classe1 'Pour 12 TextBox
    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
    Private Sub UserForm_Initialize()
     
       Dim n, x As Long
        Dim ctrl As Control
        'Pour les 12 derniers
        For Each ctrl In Controls
            For n = 13 To 24
                If ctrl.Name = "TextBox" & n Then
                    x = x + 1
                    Set txtBox(x).txtBox = ctrl
               End If
           Next n
       Next
     
    End Sub
    Images attachées Images attachées  

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    MERCI à tous les deux,

    OK, j'ai pigé le manque de logique

    Mon niveau en vba est très très faible, mais j'essaie d'apprendre progressivement, et évidemment il y a encore des notions qui me semblent encore compliquées ou confuses.

    Toutefois, Je ne suis pas certain d'avoir bien compris la méthode pour instancier avec des séries de valeurs différentes

    En attendant de bien comprendre le système, j'ai trouvé une solution plus simple:
    Etant donné que j'avais numéroté mes textbox de 1 à 12 sur USF2 puis 13 à 24 sur USF 1 pour ne pas avoir les même n° de textbox sur les deux USF, j'ai modifié en reprenant les n° 1 à 12 également sur le Userform1. Et ça a l'air de fonctionner de cette manière. Cette solution vous semble t-elle satisfaisante ?

    Sinon, peut-être accepteriez vous de m'expliquer comment il aurait fallu modifier le code

    Grand Merci à tous les deux pour votre patience.

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

Discussions similaires

  1. [XL-2007] problème erreur d'exécution 287
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/10/2012, 12h30
  2. Réponses: 3
    Dernier message: 27/02/2012, 10h49
  3. Problème erreur d'exécution '9'
    Par marco858 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/05/2011, 14h16
  4. Problème erreur d'exécution
    Par bruce207 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/04/2008, 10h09
  5. problème erreur d'exécution '48'
    Par SANGLIER dans le forum Access
    Réponses: 1
    Dernier message: 20/01/2007, 10h35

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