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 :

TextBox _ Blocage doublons [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut TextBox _ Blocage doublons
    Bonjour à tous,

    Je sais que le sujet à déjà été abordé, j'ai fait beaucoup de recherches, mais je n'arrive pas a m'en sortir.

    Je m'explique :
    J'ai un onglet qui se nomme "LANCEMENT FORMULAIRE". Dessus j'ai mis un bouton qui m'ouvre un userform.
    Dans celui ci j'ai plusieurs TextBox à saisir. Les Textbox s'incrémentent dans un autre onglet se nommant "BD CONTAINERS".
    Cependant j'ai 2 Textbox où je souhaite ne pas avoir de doublons, ils se nomment : TextBox_numero_lot et TextBox_numero_containers
    Lorsque je saisie dans TextBox_numero_lot : 1234 et dans TextBox_numero_containers : 00
    Je souhaite bloquer la saisie, si le numero de lot est déjà saisie avec ce numéro de containers. Donc si je saisie TextBox_numero_lot : 1234 avec TextBox_numero_containers : 01 la saisie doit se faire.

    J'ai essayé plusieurs Tuto mais je n'y arrive pas.
    Merci d'avance pour votre aide, A savoir que j'apprend la macro seul depuis 3 mois, donc soyez indulgent sur la qualité de mon code

    Voici une capture d'écran de l'userform si ça peux vous aider :
    Nom : Capture userform.jpg
Affichages : 135
Taille : 157,8 Ko

    Voici mon 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
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    Dim f
    Private Sub UserForm_Initialize()
    'positionnement du formulaire au centre de la feuille excel
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
    Me.TextBox_nbr_pains = Sheets("LANCEMENT FORMULAIRE").Range("E69")
     
    'Zone INFOJOUR
    'Marque la date du jour
    Me.LABEL_DATE = Sheets("parametre").Range("B7")
     
    End Sub
     
    '**************** champs temps limité au chiffre
    Private Sub TextBox_article_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_numero_lot_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_numero_containers_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_nbr_pains_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_Petits_Pains_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_Corcieux_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_heure_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789hH", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
    Private Sub TextBox_poids_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If InStr("0123456789,.", Chr(KeyAscii)) = 0 Then
       KeyAscii = 0
       Beep
     End If
    End Sub
     
    '***************** RAZ TABLEAU - ANNULE
     
    Private Sub buttonANNULE_Click()
    ' Annulation du formulaire actif, RAZ des infos
     
    Unload Me
    ThisWorkbook.Worksheets("PARAMETRE").Range("B11") = Time
    Containers.Show
     
    End Sub
     
    '---------- /!\ Bug au niveau de la validation avec donnée vide - a corriger
    '**************** validation formulaire
    Private Sub B_VALIDERG_Click()
     
    If MUF.Value = False And HDP.Value = False And LIGHT.Value = False Then
    MsgBox "Veuillez selectionner le format"
     
     
    Else
     
     
     
    '-------- 2/ déblocage feuille concerné
    ' ---- si pas de valeur vide, on envoi
            Dim no_ligne As Integer
            Dim no_comd As String * 4
     
            '*********************************** NE PAS UTILISER
    '------------------ définition de la feuille à envoyer les données
    'ThisWorkbook.Worksheets(LABEL_MOIS.Caption).visible = True
    'ThisWorkbook.Worksheets(LABEL_MOIS.Caption).Activate
            '************************ NE PAS UTILISER
     
     
    '------------------ OUVERTURE DE LA FEUILLE BD TPS ARRET
    ThisWorkbook.Worksheets("BD CONTAINERS").visible = True
    ThisWorkbook.Worksheets("BD CONTAINERS").Activate
     
     
     
        ' --- Dévérouillage feuille
        Dim w As Worksheet
    For Each w In ActiveWorkbook.Sheets
    w.Unprotect Password:="AZERTY"
    Next
     
    'actualisation de l'horloge
    ThisWorkbook.Worksheets("parametre").Range("B11") = Time
     
    '******- a modifier : intégration sur la feuille "mois" en fonction du mois
     
    '------------- 3/ Confirmation de l'envoi des données
    'message de confirmation
    If MsgBox("Confirmez-vous ces information ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    no_ligne = Range("A65536").End(xlUp).Row + 1 'placement du nouvel enregistrement en dessous
    temp = ""
     
     
    Application.ScreenUpdating = True
     
     
    '--------------- 4/ Formatage des données
    '---- suivant si MUF HDP LIGHT coché, inscrit la valeur dans colonne
     For Each c In Me.Frame_format.Controls
         If c.Value = True Then
           matiere = c.Caption
         End If
       Next c
     
    ' ---- Importation donnée
     
            Cells(no_ligne, 1) = CDate(LABEL_DATE.Caption)      'colonne A Date
            Cells(no_ligne, 2) = matiere                        'colonne B matiere
            Cells(no_ligne, 3) = TextBox_article.Value          'colonne C Code article
            Cells(no_ligne, 4) = TextBox_heure.Value            'colonne D Heure de fin
            Cells(no_ligne, 5) = TextBox_numero_lot.Value       'colonne E N° lot
            Cells(no_ligne, 6) = TextBox_numero_containers.Value 'colonne F N° containers
            Cells(no_ligne, 7) = TextBox_nbr_pains.Value         'Colonne G N° de pains
            Cells(no_ligne, 8) = TextBox_poids.Value             'colonne H poids
            Cells(no_ligne, 9) = TextBox_Petits_Pains.Value      'colonne I petits pains
            Cells(no_ligne, 10) = TextBox_Corcieux.Value         'colonne J corcieux
     
    '--- message confirmation
    MsgBox ("Vos données ont été ajoutées "), vbOKOnly, "Confirmation"
    End If
    '--------- 5/ vérouillage feuille
     
    '------------ vérouillage feuille
     
    For Each w In ActiveWorkbook.Sheets
     
        w.EnableAutoFilter = True
        w.EnableOutlining = True
        w.Protect Contents:=True, Password:="AZERTY", UserInterfaceOnly:=True
     
    Next
     
    ' RAZ du formulaire actif
     
    ThisWorkbook.Worksheets("LANCEMENT FORMULAIRE").visible = True
    ThisWorkbook.Worksheets("LANCEMENT FORMULAIRE").Activate
     
    ThisWorkbook.Worksheets("parametre").Range("B11") = Time
    'FORMULAIRE_B.Show
     
     
    End If
     
    End Sub
     
     
     
    Private Sub btn_close1_click()
    Unload Me
     
    End Sub

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut,

    perso je comprends rien du tout

    Donc si je saisie TextBox_numero_lot : 1234 avec TextBox_numero_containers : 01 la saisie doit se faire.
    La saisie doit se faire ? Quoi ? Ou ? Comment ?

    Lorsque je saisie dans TextBox_numero_lot : 1234 et dans TextBox_numero_containers : 00
    Je souhaite bloquer la saisie, si le numero de lot est déjà saisie avec ce numéro de containers
    Bloquer la saisie de quoi et quand ?

    Cependant j'ai 2 Textbox où je souhaite ne pas avoir de doublons
    Pourquoi tu aurais des doublons dans des textbox ?

    C'est vraiment pas clair...

    Il faudrait le fichier ça rendrait les choses plus claires

    PS: Pour insérer du code utilise la balise # quand tu édites ton message

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Merci de prendre le temps de m'aider !
    Citation Envoyé par ChristianBosch Voir le message
    perso je comprends rien du tout
    Désolé de ne pas être clair !


    Citation Envoyé par ChristianBosch Voir le message
    La saisie doit se faire ? Quoi ? Ou ? Comment ?
    La saisie se fait dans un atelier avec plusieurs personne. Les personnes saisissent des containers qu'ils utilisent. Les containers sont fabriqués par lot. Exemple, aujourd'hui nous fabriquons 10 containers, donc le lot sera 11062021 (Date du jour) puis identifié par numéro de container. Donc
    11062021 n°01
    11062021 n°02 ect jusqu’à 10
    Pour le suivi, je leur demande de noter les containers travaillés. Donc de dire dans la case :
    - numéro de lot : 11062021
    - numéro de container : 01

    J'ai déjà lancé le fichier, il fonctionne, sauf qu'ils notent parfois 2 fois le même containers.
    Je veux donc lorsqu'ils saisissent un numéro de lot et numéro de containers, que l'userform vérifie qu'il n'a pas déjà été saisie pour ne pas avoir de doublons.

    Citation Envoyé par ChristianBosch Voir le message
    Bloquer la saisie de quoi et quand ?
    - Donc bloquer l'écriture de l'ensemble des TextBox s'il y a un un numéro de lot avec un containers déjà saisie

    Citation Envoyé par ChristianBosch Voir le message
    Pourquoi tu aurais des doublons dans des textbox ?

    C'est vraiment pas clair...

    Il faudrait le fichier ça rendrait les choses plus claires
    Je peux te l'envoyer en MP ?

    Citation Envoyé par ChristianBosch Voir le message
    PS: Pour insérer du code utilise la balise # quand tu édites ton message
    Merci pour l'astuce

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Ok alors la j'ai bien compris ce que tu veux, mais comment tester si le numéro existe déjà si l'opérateur ne le rentre pas ? Il faudrait que la vérification se fasse juste avant l'incrémentation de la donnée dans ton tableau et avertir l'opérateur si jamais il fait une double saisie.

    Si tu travaille avec un tableau structuré tu peux faire un truc du genre :

    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
    Function test(noLot As String, noCont As String) As Boolean
    Dim i As Integer
    Dim mytab As ListObject
     
    test = False
     
    Set mytab = Feuil1.ListObjects(1)
     
    For i = 1 To mytab.ListRows.Count
        If mytab.ListColumns("NomColonneNoLot").DataBodyRange(i) = noLot And mytab.ListColumns("NomColonneNoCont").DataBodyRange(i) = noCont Then
            test = True
            Exit Function
        End If
    next i
    End Function
    si cette fonction te retourne true ça veut dire qu'il existe déjà un enregistrement dans ton tableau. Après ça tu fais ce que tu veux avec, tu peux avertir l'opérateur et vider l'USF sans enregistrer, tu peux aussi lui demander si il veut écraser les données, auquel cas tu aura besoin de sortir le numéro de ligne du tableau.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Encore une fois merci pour ton aide
    Où est ce que j’intègre cette partie dans le code ?

    Donc si j'ai bien compris :

    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
    Function test(noLot As String, noCont As String) As Boolean 'nolot = le nom de la textbox du lot ? et noCont = textbox du container ? 
    Dim i As Integer
    Dim mytab As ListObject '
     
    test = False
     
    Set mytab = Feuil1.ListObjects(1) ' Feuil1.ListObjects = nom de l'onget.ListObjects ? 
     
    For i = 1 To mytab.ListRows.Count
        If mytab.ListColumns("NomColonneNoLot").DataBodyRange(i) = noLot And mytab.ListColumns("NomColonneNoCont").DataBodyRange(i) = noCont 
    ' noLot au dessus = textBox lot ? noCont au dessus = TextBox container ? 
     
    Then
            test = True
            Exit Function
        End If
    next i
    End Function

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Oui alors cette fonction tu peux la mettre dans un module, tu as juste a modifier :
    • La feuille ou se trouve ton tableau structuré dans lequel tu enregistres tes données
    • Le entetes des colonnes de ton tableau qui contiennent les numerotde lot et numero de container



    Tu peux en suite faire appel a cette fonction en faisait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If testDoublons(TextBox_numero_lot.Value, TextBox_numero_containers.Value) Then
        MsgBox "Il existe deje un enregistrement avec les memes valeurs"
    Else
        'ici la séquence d'enregistrement
    End If
    PS : j'ai modifié le nom de la fonction

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Je viens d'intégrer le code, et réalisé un module. Je pense avoir faire une erreur car ça ne fonctionne pas.
    Les infos s'enregistrent, mais si je fait un doublon, c'est quand même ajouté

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If testDoublons(TextBox_numero_lot.Value, TextBox_numero_containers.Value) Then
        MsgBox "Il existe deje un enregistrement avec les memes valeurs"
    Else
        'ici la séquence d'enregistrement
    End If
    Et le code dans le module :
    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
    Function testDoublons(TextBox_numero_lot As String, TextBox_numero_containers As String) As Boolean 'nolot = le nom de la textbox du lot ? et noCont = textbox du container ?
    Dim i As Integer
    Dim mytab As ListObject
     
    testDoublons = False
     
    Set mytab = Feuil5.ListObjects(1) ' Feuil1.ListObjects = nom de l'onget.ListObjects ?  Oui pour etre plus precis le codename
     
    For i = 1 To mytab.ListRows.Count
        If mytab.ListColumns("Num_lot").DataBodyRange(i) = TextBox_numero_lot And mytab.ListColumns("Num_containers").DataBodyRange(i) = TextBox_numero_containers Then
     
            testDoublons = True
            Exit Function
        End If
    Next i
    End Function

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Re, pourtant chez moi c'est ok :

    Nom : tableau.JPG
Affichages : 112
Taille : 12,1 Ko

    Et ici dans la fenêtre exécution ça me renvoi bien "vrai" :

    Nom : test.JPG
Affichages : 102
Taille : 76,0 Ko

    Il faut que tu te serve de cette fonction juste pour tester avant d'enregistrer si les valeurs de tes textebox sont deja dans le tableau. Tu dois par la suite faire le code qui va empêcher l'enregistrement quand la fonction renvoie true et enregistrer quand ca renvoir false.

    En gros sur l'evenement "click sur bouton valider" il faut que tu commence par faire le test avec la fonction testDoublons, si c'est true tu affiche un message comme quoi ça existe déjà, si c'est false (else dans la condition) tu lance l'enregistrement des données dans le tableau.

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    j'ai pas trop touché ton code (dur sans le fichier) mais essaye ça :

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    Private Sub UserForm_Initialize()
    'positionnement du formulaire au centre de la feuille excel
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
    Me.TextBox_nbr_pains = Sheets("LANCEMENT FORMULAIRE").Range("E69")
     
    'Zone INFOJOUR
    'Marque la date du jour
    Me.LABEL_DATE = Sheets("parametre").Range("B7")
     
    End Sub
     
    '**************** champs temps limité au chiffre
    Private Sub TextBox_article_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_numero_lot_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_numero_containers_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_nbr_pains_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_Petits_Pains_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_Corcieux_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_heure_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789hH", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
    Private Sub TextBox_poids_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789,.", Chr(KeyAscii)) = 0 Then
    KeyAscii = 0
    Beep
    End If
    End Sub
     
    '***************** RAZ TABLEAU - ANNULE
     
    Private Sub buttonANNULE_Click()
    ' Annulation du formulaire actif, RAZ des infos
     
    Unload Me
    ThisWorkbook.Worksheets("PARAMETRE").Range("B11") = Time
    Containers.Show
     
    End Sub
     
    '---------- /!\ Bug au niveau de la validation avec donnée vide - a corriger
    '**************** validation formulaire
    Private Sub B_VALIDERG_Click()
     
    If testDoublons(TextBox_numero_lot.Value, TextBox_numero_containers.Value) Then
        MsgBox "Il existe deje un enregistrement avec les memes valeurs"
    Else
        If MUF.Value = False And HDP.Value = False And LIGHT.Value = False Then
            MsgBox "Veuillez selectionner le format"
        Else
        '-------- 2/ déblocage feuille concerné
        ' ---- si pas de valeur vide, on envoi
        Dim no_ligne As Integer
        Dim no_comd As String * 4
     
        '*********************************** NE PAS UTILISER
        '------------------ définition de la feuille à envoyer les données
        'ThisWorkbook.Worksheets(LABEL_MOIS.Caption).visible = True
        'ThisWorkbook.Worksheets(LABEL_MOIS.Caption).Activate
        '************************ NE PAS UTILISER
     
     
        '------------------ OUVERTURE DE LA FEUILLE BD TPS ARRET
        ThisWorkbook.Worksheets("BD CONTAINERS").Visible = True
        ThisWorkbook.Worksheets("BD CONTAINERS").Activate
     
     
     
        ' --- Dévérouillage feuille
        Dim w As Worksheet
        For Each w In ThisWorkbook.Sheets
                w.Unprotect Password:="AZERTY"
        Next w
     
        'actualisation de l'horloge
        ThisWorkbook.Worksheets("parametre").Range("B11") = Time
     
        '******- a modifier : intégration sur la feuille "mois" en fonction du mois
     
        '------------- 3/ Confirmation de l'envoi des données
        'message de confirmation
        If MsgBox("Confirmez-vous ces information ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            no_ligne = Range("A65536").End(xlUp).Row + 1 'placement du nouvel enregistrement en dessous
            temp = ""
     
     
            Application.ScreenUpdating = True
     
     
            '--------------- 4/ Formatage des données
            '---- suivant si MUF HDP LIGHT coché, inscrit la valeur dans colonne
            For Each c In Me.Frame_format.Controls
            If c.Value = True Then
                matiere = c.Caption
            End If
            Next c
     
            ' ---- Importation donnée
     
            Cells(no_ligne, 1) = CDate(LABEL_DATE.Caption) 'colonne A Date
            Cells(no_ligne, 2) = matiere 'colonne B matiere
            Cells(no_ligne, 3) = TextBox_article.Value 'colonne C Code article
            Cells(no_ligne, 4) = TextBox_heure.Value 'colonne D Heure de fin
            Cells(no_ligne, 5) = TextBox_numero_lot.Value 'colonne E N° lot
            Cells(no_ligne, 6) = TextBox_numero_containers.Value 'colonne F N° containers
            Cells(no_ligne, 7) = TextBox_nbr_pains.Value 'Colonne G N° de pains
            Cells(no_ligne, 8) = TextBox_poids.Value 'colonne H poids
            Cells(no_ligne, 9) = TextBox_Petits_Pains.Value 'colonne I petits pains
            Cells(no_ligne, 10) = TextBox_Corcieux.Value 'colonne J corcieux
     
            '--- message confirmation
            MsgBox ("Vos données ont été ajoutées "), vbOKOnly, "Confirmation"
        End If
        '--------- 5/ vérouillage feuille
     
        '------------ vérouillage feuille
     
        For Each w In ActiveWorkbook.Sheets
     
            w.EnableAutoFilter = True
            w.EnableOutlining = True
            w.Protect Contents:=True, Password:="AZERTY", UserInterfaceOnly:=True
     
        Next
     
        ' RAZ du formulaire actif
     
        ThisWorkbook.Worksheets("LANCEMENT FORMULAIRE").Visible = True
        ThisWorkbook.Worksheets("LANCEMENT FORMULAIRE").Activate
        ThisWorkbook.Worksheets("parametre").Range("B11") = Time
    'FORMULAIRE_B.Show
     
     
    End If
     
    End If
     
    End Sub
     
     
     
    Private Sub btn_close1_click()
    Unload Me
     
    End Su

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Merci pour ton aide
    J'ai utilisé le code complet que tu m'a envoyé

    Je pense que c'est mon codename de mon module qui n'est pas bon. Lorsque j'exécute la formule il me met une erreur sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mytab = Feuil5.ListObjects(1)
    Où est-ce que l'on trouve le codename pour être sur ?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Je viens de voir un tuto, mon codename est bon, je ne comprend pas pourquoi j'ai une erreur avec cette ligne de code

  12. #12
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut, essaye avec le nom du tableau dans le listobjet du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil5.listobject("Nom_tableau")

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    J'ai sélectionné le tableau, je l'ai nommé "Nom_tableau"
    J'ai codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mytab = Feuil5.ListObjects("Nom_tableau")
    Et ça ne marche pas

    J'ai toujours le défaut : "L'indice n'appartient pas a la sélection"

  14. #14
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Citation Envoyé par Geckothony Voir le message
    J'ai sélectionné le tableau, je l'ai nommé "Nom_tableau"
    J'ai codé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mytab = Feuil5.ListObjects("Nom_tableau")
    Et ça ne marche pas

    J'ai toujours le défaut : "L'indice n'appartient pas a la sélection"
    Hum tu es sur que le codename de la feuille contenant ton tableau est bien "Feuil5" ??

    Sinon envoie le classeur ça ira plus vite

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Ci-joint le fichier. Il faut cliquer sur le bouton accès admin en haut, le mdp est :
    Tu arriveras dans l'onglet paramètres.
    Clique sur Déverrouiller pour faire apparaître tout les onglets et pour pouvoir les modifier

    Encore merci !
    Fichiers attachés Fichiers attachés

  16. #16
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Citation Envoyé par Geckothony Voir le message
    BD SAISIE LIGNE - V5 2021 - Copie.xlsm

    Ci-joint le fichier. Il faut cliquer sur le bouton accès admin en haut, le mdp est : Adminfrobas
    Tu arriveras dans l'onglet paramètres.
    Clique sur Déverrouiller pour faire apparaître tout les onglets et pour pouvoir les modifier

    Encore merci !
    Salut, je pense qu'il doit me manquer des infos car le ruban est vide quand j'ouvre le fichier , je ne peux pas accéder a l'onglet insertion pour le tableau;

    Tout se cache alors que j'ai viré tout le scrip a l'evenement open.

    et j'ai ce message à l'ouverture, il doit donc me manquer un fichier.

    Nom : pb.JPG
Affichages : 83
Taille : 28,9 Ko

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Il faut aller dans l'onglet Paramétre, cliquer sur déverrouiller, cliquer sur l'onglet Menu Excel, se mettre en mode création pour faire les modifs dans les onglets avec le ruban

  18. #18
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Citation Envoyé par Geckothony Voir le message
    Il faut aller dans l'onglet Paramétre, cliquer sur déverrouiller, cliquer sur l'onglet Menu Excel, se mettre en mode création pour faire les modifs dans les onglets avec le ruban
    Non ça fonctionne pas chez moi.. D'ailleurs j'ai du ouvrir un autre fichier excel pour accéder au développeur et sortir de cet affichage infernal. Je vais pas pouvoir t'aider...

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 22
    Par défaut
    Désolé, merci pour ton aide !

    Au final tu m'a mis sur la bonne voie, j'ai insérer un tableau dans l'onglet de la Feuil5 et ça a marché
    Encore merci ! =)

  20. #20
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Citation Envoyé par Geckothony Voir le message
    Désolé, merci pour ton aide !

    Au final tu m'a mis sur la bonne voie, j'ai insérer un tableau dans l'onglet de la Feuil5 et ça a marché
    Encore merci ! =)
    Oui tu ne devait pas avoir de tableau structuré sur la feuil5

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

Discussions similaires

  1. Macro blocage doublons de lignes
    Par reginato dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2015, 14h58
  2. [XL-2010] Eviter saisie doublon dans textBox
    Par HIGGUINS dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/06/2013, 21h55
  3. [XL-2007] Test sur textbox checkbox et doublon
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 07/04/2012, 17h21
  4. [XL-2010] blocage du userform textbox
    Par tompom3108 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/04/2012, 16h56
  5. [XL-2010] Effacer doublons dans TextBox
    Par re dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2010, 19h23

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