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 :

Essai VBA formulaire saisie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Par défaut Essai VBA formulaire saisie
    Bonjour,

    En regardant des vidéo sur internet je suis tombé sur un tutoriel permettant de créer un formulaire de saisie comportant ce code :

    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
    Private Sub CommandButton1_Click()
     
    Dim ctrl As Control
    Dim Colonne As Integer
    Dim Derligne As Integer
     
    Derligne = Sheets("Liste").Range("A1").End(xlDown).Row + 1
     
    For Each ctrl In UserForm1.Controls
     
    Colonne = Val(ctrl.Tag)
     
     
    If Colonne > 0 Then Sheets("Liste").Cells(Derligne, Colonne) = ctrl
     
    Next
    End
     
     
    End Sub
    mais j'ai une erreur d'execution '6':
    Dépassement de capacité

    quelqu'un peut'il m'expliquer?

    Cordialement

  2. #2
    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
    quelqu'un peut'il m'expliquer?
    La limite d'un type integer est exposée dans l'aide interne VBA --->>
    Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767.
    Or, ta variable Derligne a été typée en Integer. Et si elle dépasse 32 767, ma foi ...
    Type-la donc en Long ...

    J'ignore par ailleurs ce que contiennent tes tag, dont tu utilises la valeur pour ta variable Colonne, que tu as également typée en Integer ...

  3. #3
    Membre averti
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Par défaut
    J'ai essayé ce code :

    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
    Private Sub CommandButton1_Click()
    
    Dim ctrl As Control
    Dim Colonne As Integer
    Dim Derligne As Long
    
    'il part de la dernière ligne et remonte pour trouver la ligne occupée et rajoute 1
    Derligne = Sheets("Liste").Range("A1").End(xlDown).Row + 1
    
    'Balyae les contrôles un par un avec For et Each
    For Each ctrl In UserForm1.Controls
    
    'la valeur de "colonne" = à la valeur du Tag
    Colonne = Val(ctrl.Tag)
    
    
    If Colonne > 0 Then Sheets("Liste").Cells(Derligne, Colonne) = ctrl
    
    Next
    End
    
    
    End Sub
    Quand je clique sur mon bouton ajouter l'erreur suivant est renvoyé : erreur d'exécution '1004': erreur définie par l'application ou par l'objet
    Le débogage me surligne la ligne que j'ai coloré en rouge dans le code

    Cordialement

    Citation Envoyé par unparia Voir le message
    Bonjour

    La limite d'un type integer est exposée dans l'aide interne VBA --->>

    Or, ta variable Derligne a été typée en Integer. Et si elle dépasse 32 767, ma foi ...
    Type-la donc en Long ...

    J'ignore par ailleurs ce que contiennent tes tag, dont tu utilises la valeur pour ta variable Colonne, que tu as également typée en Integer ...

  4. #4
    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
    Comme tu le constates, l'erreur première (Dépassement de capacité) n'est plus là.
    Et tu as maintenant une autre erreur, dont la cause est également autre
    Quelle est la valeur de colonne en mode Debug ? (tu as à ce propos "zappé" la dernière phrase de mon précédent message...)
    Par ailleurs : ta variable ctrl est un objet (un contrôle présent sur ton userform) et non une valeur. Il t'appartient de préciser la propriété de cet objet dont tu souhaites affecter la valeur à la cellule traitée en boucle.
    Si tu as copié/collé ce code, le "tutoriel" que tu évoques est à déconsidérer totalement.

  5. #5
    Membre averti
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Par défaut
    Bonjour,

    Après réflexion je me suis lancé dans le paramétrage d'un vrai formulaire, et je dois avouer que cela me permet de comprendre peu à peu le VBA et à y prendre goût. J'ai un petit souci avec mon formulaire de saisie qui dois renvoyer mes données dans un tableau. Lorsque je valide mon ajout de donnée je voudrais qu'il remplisse la 1ere ligne vide qu'il rencontre je m'explique : si ma ligne 2 de mon tableau contient des valeurs et que la ligne 4 en contient elle aussi je voudrais que lorsque je clique sur ajouter la ligne 3 se remplisse voila le code que j'ai essayé :

    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
    Private Sub CommandButton1_Click()
    If TextBox1 = "" Or ComboBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox4 = "jj/mm/aaaa" Or ComboBox2 = "" Or TextBox5 = "" Or TextBox6 = "" Then
    MsgBox ("Toutes les informations ne sont pas remplies")
    Else
        If Sheets("Liste").Range("A2") = "" Then
        Else
        Sheets("Liste").ListObjects(1).ListRows.Add
        End If
     
        dlt = Sheets("Liste").Range("H1048576").End(xlUp).Row
     
        Sheets("Liste").Range("A" & dlt) = TextBox1
        Sheets("Liste").Range("B" & dlt) = ComboBox1
        Sheets("Liste").Range("C" & dlt) = TextBox2
        Sheets("Liste").Range("D" & dlt) = TextBox3
        Sheets("Liste").Range("E" & dlt) = TextBox4
        Sheets("Liste").Range("F" & dlt) = ComboBox2
        Sheets("Liste").Range("G" & dlt) = TextBox5
        Sheets("Liste").Range("H" & dlt) = TextBox6
    End If
    End Sub
    J'ai aussi essayé de remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dlt = Sheets("Liste").Range("A1048576").End(xlUp).Row
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dlt = Sheets("Liste").Range("A").End(xlDown).Row
    Alors avec le premier code sa fonctionne mais pas comme je le souhaite c'est à dire qu'il rajoute une ligne sous la dernière ligne rempli.

    J'ai penser à une 2eme solution : utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dlt = Sheets("Liste").Range("A1048576").End(xlUp).Row
    avec dans mon formulaire un bouton supprimer qui permettra de supprimer une ligne du tableau désiré, mais sa je n'est pas trouvé comment faire.

    Cordialement

    Citation Envoyé par unparia Voir le message
    Comme tu le constates, l'erreur première (Dépassement de capacité) n'est plus là.
    Et tu as maintenant une autre erreur, dont la cause est également autre
    Quelle est la valeur de colonne en mode Debug ? (tu as à ce propos "zappé" la dernière phrase de mon précédent message...)
    Par ailleurs : ta variable ctrl est un objet (un contrôle présent sur ton userform) et non une valeur. Il t'appartient de préciser la propriété de cet objet dont tu souhaites affecter la valeur à la cellule traitée en boucle.
    Si tu as copié/collé ce code, le "tutoriel" que tu évoques est à déconsidérer totalement.

Discussions similaires

  1. [VBA-E] Saisie d'une date dans une Input Box
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/05/2006, 20h51
  2. [VBA-E] saisie de schema
    Par Speranza dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/05/2006, 10h03
  3. Réponses: 2
    Dernier message: 17/03/2006, 18h15
  4. Réponses: 3
    Dernier message: 13/06/2005, 14h07
  5. Réponses: 2
    Dernier message: 04/02/2005, 11h03

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