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 :

Controle de 2* 32 zones de saisie dans un userform [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Controle de 2* 32 zones de saisie dans un userform
    Bonjour,

    Je me permets de poster ma question, bien que en réfléchissant et en me relisant, j'ai trouvé une autre solution pour la saisie
    Cependant la question reste intéressante.

    J'ai un userform où l'utilisateur scanne des objets. chaque scan verrouille la zone de saisie et passe à la suivante.
    Je vérifie au fil de l'eau que l'objet n'a pas déjà été scanné
    J'ai ajouté un checkbox pour déverrouiller une zone et refaire la saisie en cas de besoin. Cela fonctionne.
    (ce sont des objets mis en boite).

    Maintenant je vais scanner 32 boites à mettre sur une palette !
    Je cherche à avoir une boucle de check plutot que d'écrire 64 private sub. c'est pas tant l'effort que le risque d'oubli ou d'erreur.
    Et comme je fait le controle au fur et à mesure, je ne peux pas faire une boucle sur les controls.

    en fait je cherche à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private sub change_objets 1 2 3 4 ....32
    Mon code actuel (extrait)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Coque_1_Change()
    If Len(Me.Coque_1.Value) = 18 Then
    For i = Nb_Coques To 1 Step -1
    If i <> 1 Then
    If Me.Controls("Coque_" & i).Value <> "" And Me.Controls("Coque_" & i).Value = Me.Coque_1.Value Then MsgBox ("Attention coques déjà saisie, resaisir "): Me.Coque_1 = "": Exit Sub
    End If
    Next
    Me.Coque_1.Locked = True
    Me.Coque_2.SetFocus
    End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CheckBox1_Click()
    If Me.CheckBox1 = True Then Me.Coque_1.Locked = False: Me.Coque_1 = "": Me.CheckBox1 = False: Me.Coque_1.SetFocus
    End Sub
    J'ai vu une possibilité, mais qui me parait plus compliquée que d'ecrire mes 64 privates sub
    https://www.mrexcel.com/board/thread...hanges.820733/

    Comme expliqué au début, je vais opter pour une solution beaucoup plus simple à savoir une zone de saisie, sur laquelle je fais mon controle avant de copier le contenu de la zone dans les différentes box.
    et pour corriger je vais mettre un checkbox supplémentaire qui me permettra de lancer un bouclage sur tous les checkbox pour voir lequel est cliqué.


    Merci pour vos conseils
    Denis

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par Denis_67 Voir le message
    J'ai vu une possibilité, mais qui me parait plus compliquée que d'ecrire mes 64 privates sub
    Au lieu d'écrire '64 privates sub' en utilisant une module de classe la procédure fonctionne pour tous les objets du même type.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Un nouvel univers à découvrir pour moi !

    Me reste plus qu'à prendre le chemin de classe !
    https://sinarf.developpez.com/access/vbaclass/

    Pour l'instant, je m'en suis sorti avec une zone supplémentaire de saisie, et après la saisie, je vais scanner mes 18 zones et les remplir

    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
    Private Sub Input_Boite_Change()
     
    If Len(Me.Input_Boite.Value) = 18 Then
        For i = 1 To 32
        If Me.Input_Boite.Value <> "" Then
            If Me.OF = "" Then
            Me.OF = Left(Me.Input_Boite, 12)
            Num_OF = Left(Me.Input_Boite, 12)
            Call Lecture_OF
              Me.OF.Locked = False
            Me.Article.Locked = False
            Me.Designation.Locked = False
            With ThisWorkbook.Sheets("Tempo")
            Me.Article = Left(.Range("A2"), 8)
            Me.Designation = .Range("B2")
            End With
            Me.OF.Locked = True
            Me.Article.Locked = True
            Me.Designation.Locked = True
            End If
     
            If Me.OF <> Left(Me.Input_Boite, 12) Then MsgBox ("ATTENTION Cette boite ne vient pas du même OF"): Me.Input_Boite = "": Exit Sub
            If Me.Input_Boite.Value = Me.Controls("Boite_" & i).Value Then
            MsgBox ("Attention Boite déjà saisie, resaisir ")
            Me.Input_Boite = ""
            Exit Sub
            End If
        If Me.Controls("Boite_" & i).Value = "" Then
        If Idx_Change = 0 Then Idx_Change = i
            If Me.Controls("Boite_" & Idx_Change).Value = "" Then
            Me.Controls("Boite_" & Idx_Change).Value = Me.Input_Boite
            Me.Input_Boite = ""
            Me.Controls("Boite_" & Idx_Change).Locked = True
            Me.Input_Boite.SetFocus
            Idx_Change = 0
            End If
        Exit Sub
        End If
        End If
        Next
     
    End If
    End Sub
    merci
    Denis

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Si tu le souhaites, j'ai également écrit un tuto sur les modules de classe...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/08/2011, 17h54
  2. Zone de saisie dans un MessageDlg?
    Par magicstar dans le forum Débuter
    Réponses: 3
    Dernier message: 20/10/2009, 23h18
  3. Probleme de zone de saisie dans firefox
    Par samourai_alex dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/07/2006, 00h08
  4. Zone de saisie dans une listbox
    Par kurul1 dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/03/2006, 11h54

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