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 :

gestion des stock Macro du If


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    gestion des stock Macro du If
    Bonsoir tous le monde,

    J'ai produit un programme de gestion des stock, en regardant un tutoriel, mais dans un de mes userform, j'ai un problème que je ne suis pas capable de régler. un problème qui est dans mon userform, J'ai des bouton radio comme certain les nommes et lorsque l'on en choisit un , cela me donne le numéro et c'est quand j'ai rentré les informations dans le tableau que ce numéro doit s'incréminer, mais cela ne marche pas trop.

    Code vba :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
    Private Sub CommandButton1_Click()
    Dim Dl As Integer
     
    If Me.Txt_Nom <> "" And Me.Txt_description <> "" And Me.Txt_prix <> "" And Me.Txt_min <> "" Then
        'ajouter une ligne au tableau
        Sheets(2).ListObjects(1).ListRows.Add
        'Aller à la derniere ligne
        Dl = Sheets(2).Range("b99999").End(xlUp).Row
     
        'Ajouter dans le tableau
        Sheets(2).Range("B" & Dl) = Me.Lebel_info.Caption
        Sheets(2).Range("C" & Dl) = Me.Txt_Nom
        Sheets(2).Range("D" & Dl) = Me.Txt_description
        Sheets(2).Range("E" & Dl) = CCur(Me.Txt_prix)
        Sheets(2).Range("H" & Dl) = CInt(Me.Txt_min)
        Sheets(2).Range("J" & Dl) = "Actif"
     
       'incrémenter le nr d'article sur la page config
     
        If Me.Lebel_info.Caption = Sheets(8).Range("e19").Value = True Then
            Sheets(8).Range("d19") = Sheets(8).Range("d19") + 1
        ElseIf Sheets(8).Range("e20").Value = True Then
            Sheets(8).Range("d20") = Sheets(8).Range("d20") + 1
        ElseIf Sheets(8).Range("e21").Value = True Then
            Sheets(8).Range("d21") = Sheets(8).Range("d21") + 1
        Else
            Sheets(8).Range("d23") = Sheets(8).Range("d23") + 1
         End If
     
     
        ThisWorkbook.Save
     
        Unload add_article
     
    End If
     
    End Sub

    Désolé si je n'ai pas tous fait dans les règles, mais j'ai une certaine urgence car vous êtes mon dernier recours .
    Merci a vous

  2. #2
    Responsable
    Office & Excel

    Salut.

    A mon avis, c'est sur la ligne 20 que tu as un problème. Je serais tenté de dire que le Me.Lebel_info.Caption = est de trop.

    Au passage, je n'ai pas vu de code utilisant un bouton radio (optionbox) ^^


    Si je peux donner un conseil...

    tant qu'à utiliser le listobject, je l'utiliserais au départ de l'objet Range correspondant plutôt que la feuille, j'utiliserais le listrow.add pour récupérer la nouvelle plage dans une variable et j'essaierais de détacher mon code de l'emplacement des données sur la feuille. Si cette technique t'intéresse, je te propose cette contribution et ce billet de blog.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    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...
    Vous avez apprécié la réponse? =>
    ---------------

  3. #3
    Candidat au Club
    Je vous remercie M,Fauconnier pour votre aide.

    Je vous met une image du tableau et formulaire qui est utilisé et le pourquoi du "Me.Lebel_info.Caption"



    et je vous met le code complet pour que vous voyez ce que je veux faire. Et mon problème vient de l'incrémentation du # d'article dans ma page de config et chaque bouton d'option a un préfixe différent. Je vais regarder les informations sur la listobjet que vous m'avez donné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
    Private Sub CommandButton1_Click()
    Dim Dl As Integer
     
    If Me.Txt_Nom <> "" And Me.Txt_description <> "" And Me.Txt_prix <> "" And Me.Txt_min <> "" Then
        'ajouter une ligne au tableau
        Sheets(2).ListObjects(1).ListRows.Add
        'Aller à la derniere ligne
        Dl = Sheets(2).Range("b99999").End(xlUp).Row
     
        'Ajouter dans le tableau
        Sheets(2).Range("B" & Dl) = Me.Lebel_info.Caption
        Sheets(2).Range("C" & Dl) = Me.Txt_Nom
        Sheets(2).Range("D" & Dl) = Me.Txt_description
        Sheets(2).Range("E" & Dl) = CCur(Me.Txt_prix)
        Sheets(2).Range("H" & Dl) = CInt(Me.Txt_min)
        Sheets(2).Range("J" & Dl) = "Actif"
     
       'incrémenter le nr d'article sur la page config
     
        If Sheets(8).Range("e19").Value = use Then
            Sheets(8).Range("d19") = Sheets(8).Range("d19") + 1
        ElseIf Sheets(8).Range("e20").Value = use Then
            Sheets(8).Range("d20") = Sheets(8).Range("d20") + 1
        ElseIf Sheets(8).Range("e21").Value = use Then
            Sheets(8).Range("d21") = Sheets(8).Range("d21") + 1
        ElseIf Sheets(8).Range("e23").Value = use Then
            Sheets(8).Range("d23") = Sheets(8).Range("d23") + 1
         End If
     
     
        ThisWorkbook.Save
     
        Unload add_article
     
    End If
     
    End Sub
     
    Private Sub Lebel_info_Click()
     
    End Sub
     
    Private Sub Option_MP_Click()
    Me.Lebel_info.Caption = Sheets(8).Range("e23").Value
     
     
    End Sub
     
    Private Sub Option_MP_MDF_Click()
     
    End Sub
     
    Private Sub Option_P_Click()
    Me.Lebel_info.Caption = Sheets(8).Range("e21").Value
     
     
    End Sub
     
    Private Sub Option_PF_Click()
    Me.Lebel_info.Caption = Sheets(8).Range("e19").Value
     
    End Sub
     
    Private Sub Option_PG_Click()
    Me.Lebel_info.Caption = Sheets(8).Range("e20").Value
     
     
    End Sub
     
     
    Private Sub Txt_description_Change()
     
    End Sub
     
    Private Sub Txt_min_Change()
    If Not IsNumeric(Txt_min) And Txt_min <> "" Then
        MsgBox "Désoler uniquement des chiffres !"
        Txt_min = ""
    End If
    End Sub
     
    Private Sub Txt_Nom_Change()
     
    End Sub
     
    Private Sub Txt_prix_Change()
     
    If Not IsNumeric(Txt_prix) And Txt_prix <> "" Then
        MsgBox "Désoler uniquement des chiffres !"
        Txt_prix = ""
    End If
    End Sub
     
    Private Sub UserForm_Click()
     
    End Sub



    Je ne comprend pas pourquoi j'ai des images attachées qui ne sont pas dans mon message d'origine il me semble, mais bon encore une fois vous remarqué que je suis novice dans cela.

  4. #4
    Candidat au Club
    Bonsoir a tous,
    Je dois vous dire que je suis une novice avec Excel, la dernière fois que j'ai eu un cours sur ce programme date de 1994 ou 1995. Ce qui fait que je remercie internet et les tutoriel et forum qui m'on aidé.

    Je crois que j'ai résolu mon problème en changeant mon code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     If Sheets(8).Range("e19").Value = use Then
            Sheets(8).Range("d19") = Sheets(8).Range("d19") + 1
        ElseIf Sheets(8).Range("e20").Value = use Then
            Sheets(8).Range("d20") = Sheets(8).Range("d20") + 1
        ElseIf Sheets(8).Range("e21").Value = use Then
            Sheets(8).Range("d21") = Sheets(8).Range("d21") + 1
        ElseIf Sheets(8).Range("e23").Value = use Then
            Sheets(8).Range("d23") = Sheets(8).Range("d23") + 1
         End If



    par celui-ci qui pour le moment ne me donne pas de problème d'incrémentation. j'aimerais avoir votre avis sur ce changement et me dire si cela ne fera pas de bug. Si tous est correct, je mettrai ma discussion comme résolu.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Select Case True
        Case Me.Option_PF
            Sheets(8).Range("D19") = Sheets(8).Range("D19") + 1
            Me.Option_PF = False
        Case Me.Option_P
            Sheets(8).Range("d21") = Sheets(8).Range("D21") + 1
            Me.Option_P = False
        Case Me.Option_PG
            Sheets(8).Range("D20") = Sheets(8).Range("D20") + 1
            Me.Option_PG = False
        Case Me.Option_MP
            Sheets(8).Range("D23") = Sheets(8).Range("D23") + 1
            Me.Option_MP = False
        End Select

  5. #5
    Responsable
    Office & Excel

    Les deux blocs ne testent pas du tout les mêmes choses. Dans mon premier message, je te demandais où étaient tes optionbox puisque ton code ne les manipulaient pas. Ton code testait des valeurs de cellules, comme le premier code de ton dernier message.

    Le second code de ton dernier message utilise bien les optionbox, donc tout est bon. Perso, je n'aime pas cette utilisation de Select Case, et tu aurais pu remplacer simplement les conditions de tes If imbriqués par le test des combobox. Je considère (ce n'est pas vérité universelle, c'est juste la mienne) que le code est plus propre lorsque l'on utilise les bonnes syntaxes

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Me.Option_PF Then
      Sheets(8).Range("d19") = Sheets(8).Range("d19") + 1
    ElseIf Me.Option_PG Then
      Sheets(8).Range("d20") = Sheets(8).Range("d20") + 1
    ElseIf Me.Option_P Then
      Sheets(8).Range("d21") = Sheets(8).Range("d21") + 1
    ElseIf Me.Option_MP Then
      Sheets(8).Range("d23") = Sheets(8).Range("d23") + 1
    End If
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    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...
    Vous avez apprécié la réponse? =>
    ---------------

  6. #6
    Candidat au Club
    Merci M. Fauconnier,

    Les option box pour moi servaient principalement a ce que le # d'article avec son préfixe s'affiche dans le formulaire au premier abord.
    il est vrai que mes premiers codes n'étaient pas parfait, mais je ne savait pas trop si je pouvait utilisé le titre des option box pour faire une conditions avec if then ou case. Moi aussi j'aime mieux utilisé If Then que les case select. Si vous dite que je peux faire la même chose avec les If then, je vais changer pour les If car il est vrai que cela fait plus propre.

    Je vous remercie encore une fois et je met la discussion comme résolu

###raw>template_hook.ano_emploi###