Cet article existe déjà : ne s'exécute pas

Bonjour à toutes et à tous,

Dans la procédure Sub RécupérationCréditsBudgétaires, une instruction me permet de signaler que l'article existe déjà mais elle ne s'exécute pas.

D'avance merci à celle ou à celui qui va pouvoir m'aider à résoudre ce problème.

Bonsoir,

les lignes concernées sont celles suivies de: '*********************, il y en a 1 dans chaque partie.

Private Function IndiceCréditsBudgétairesBP(ByVal tbCodeArticle As String) As Long
    'Renvoie l'indice de l'article dans le tableau TabBDCréditsBudgétaires pour le code article donné si l'article existe. Renvoie zéro si l'article n'existe pas.
    IndiceCréditsBudgétairesBP = 0
    'On Error Resume Next : Lorsqu'une erreur d'exécution survient, le contrôle est transmis à l'instruction qui suit immédiatement celle où l'erreur s'est produite, et l'exécution
    'continue. Il est recommandé d'utiliser cette formulation plutôt que l'instruction On Error GoTo pour accéder à des objets.
    On Error Resume Next
    'WorksheetFunction.Match : Renvoie la position relative d'un élément dans une matrice (matrice : permet de créer des formules uniques permettant d’obtenir plusieurs résul-
    'tats et qui agissent sur un groupe d’arguments répartis dans des lignes et des colonnes. Une plage matricielle partage une même formule tandis qu’une constante matricielle
    'est un groupe de constantes qui sert d’argument.), qui correspond à une valeur spécifiée dans un ordre spécifié. Utilisez la fonction MATCH au lieu de l'une des fonctions
    'LOOKUP lorsque vous avez besoin de la position d'un élément dans une plage au lieu de l'élément proprement dit.
    IndiceCréditsBudgétairesBP = WorksheetFunction.Match(tbCodeArticle, Range("TabBDCréditsBudgétaires[code article]"), 0) '*********************
    'On Error GoTo 0 : Invalide dans la procédure en cours tout gestionnaire d'erreurs validé.
    On Error GoTo 0
End Function

Sub RécupérationCréditsBudgétairesBP(ByVal I As Long)
    With Range("TabBDCréditsBudgétaires").ListObject
        If I > 0 Then
            'Si l'article existe : on demande confirmation de la modification.
            If MsgBox("L'article " & cbArticle.Value & " " & "existe déjà dans la feuille BD budgets primitifs, tableau structuré TabBDCréditsBudgétaires." & vbCrLf & vbCrLf & _
            "Voulez-vous le modifier ou le supprimer ?", vbExclamation + vbYesNo) = vbYes Then
                'Modification acceptée : on récupère les infos article non encore renseignées.
                'DataBodyRange :Cette propriété renvoie un objet Range qui représente la plage de valeurs, à l'exception de la ligne d'en-tête dans une table. Type de données en
                'lecture seule. cbTYpeValue : nom de l'objet, de l'outil dans le formulaire; .ListColumns : Cette propriété renvoie une collection ListColumns qui représente toutes les
                'colonnes d'un objet ListObject. Type de données en lecture seule. Le contenu de la parenthèse du .ListColumns représente le nom de la colonne tel qu'il figure dans
                'le tableau structuré mentionné sur la ligne With.
                cbPériodeBP.Value = .ListColumns("Période").DataBodyRange(I)
                tbCodePériodeBP.Value = .ListColumns("Code période").DataBodyRange(I)
                cbConditionnementBP.Value = .ListColumns("Conditionnement").DataBodyRange(I)
                tbCodeConditionnementBP.Value = .ListColumns("Code conditionnement").DataBodyRange(I)
                tbPrixUnitaire.Value = .ListColumns("Prix unitaire").DataBodyRange
                tbQuantité.Value = .ListColumns("Quantité").DataBodyRange
                tbTotalBudgetPrimitif.Value = .ListColumns("Total BP").DataBodyRange
                tbDateCréationBP.Value = .ListColumns("Date création").DataBodyRange(I)
                tbNuméroCréationBP.Value = .ListColumns("Numéro création").DataBodyRange(I)
            Else
                'Modification refusée : on efface le nom article.
                cbArticle.Value = Empty
            End If
        End If
    End With
'Recherche existence crédits budgétaires.

    I = IndiceCréditsBudgétairesBP(tbCodeArticle.Value) '*********************
'Si I supérieur à Zéro alors
    If I > 0 Then
'Crédit budgétaire existant : Affichage d'un message informant de l'existence de ce crédit.
    MsgBox "L'article " & cbArticle.Value & " existe déjà dans la feuille BD budgets primitifs, tableau structuré TabBDCrédits budgétaires." & vbCrLf & vbCrLf & _
    "Vous pouvez le modifier oule supprimer.", vbInformation
    Call RécupérationInfosCréditsBudgétairesBP(I)
    J = I
    End If
End Sub
Private Sub tbPrixUnitaire_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'N'autoriser que la saisie des chiffres et d'une seule virgule. KeyAscii : c'est la référence Ascii qui caractérise le point et la virgule : 44 pour la virgule, 46 pour le point. Va per-
    'mettre de transformer le point en virgule lors de la saisie des chiffres du tbPrixUnitaire.Value.
        If KeyAscii = 46 Then KeyAscii = 44
    'Instr : Liste des chiffres autorisés.
        If InStr("1234567890,", Chr(KeyAscii)) = 0 Or (InStr(tbPrixUnitaire.Value, ",") <> 0 And Chr(KeyAscii) = ",") Then
            KeyAscii = 0
        End If
End Sub

cdlt

Je n'ai vu aucune différence avec ce qui est dans mon fichier. après les '********************

J'ai eu un mal fou à trouver la différence mais enfin je l'ai trouvée : procédure RécuparationCréditsBudgétaires : I = IndiceCréditsBudgétairesBP (cbArticle.value) au lieu de tbCodeArticle.value

Maintenant, il reste le problème de GénérerBudgetPrimitifDépensesAlimentaires.

Bonjour,

Vous avez oublié aussi celle-là dans: "Function IndiceCréditsBudgétairesBP"

 IndiceCréditsBudgétairesBP = WorksheetFunction.Match(tbCodeArticle, Range("TabBDCréditsBudgétaires[code article]"), 0) '*********************

********************************************************************************************************************************************************

Dans la procédure Sub RécupérationCréditsBudgétaires, une instruction me permet de signaler que l'article existe déjà mais elle ne s'exécute pas.

si je valide, cela va bien s'ajouter dans "BD budgets primitifs".

Que cela devrait-il faire plus précisément et à la suite de quelles actions ?

Bonjour Arturo83,

Dans la function, aucune erreur, il y avait bien dés le départ code article aux deux endroits figurant dans votre message.

Oui, cela s'ajoute bien au TabBUdgetsPrimitifs, avec l'exécution correcte du tri. En même temps, cela s'ajoute également au TabBDBudgetPrimitifDépensesAlimentaires mais le tri semble ne pas se faire automatiquement.

Ok, je comprends mieux.

dans "Sub cmdValidationBP_Click", ajoutez cette ligne en fin de macro

    Call TrierTabBDBudgetPrimitifDépensesAlimentaires

puis ajoutez la macro à la fin du module

Private Sub TrierTabBDBudgetPrimitifDépensesAlimentaires()
    'Trier la feuille BD budgets primitifs, tableau structuré TabBDBudgetPrimitifDépensesAlimentaires, par article.
        Range("TabBDBudgetPrimitifDépensesAlimentaires").Sort key1:=Range("TabBDBudgetPrimitifDépensesAlimentaires[Article]"), key2:=Range("TabBDBudgetPrimitifDépensesAlimentaires[Catégorie]"), order2:=xlDescending, Header:=xlYes
End Sub

Cdlt

Re,

Merci. Je vais faire cela dans une demi-heure, tester et vous donnerez mes conclusions. Tests effectués, c'est parfait. Encore merci.

J'ai créé un nouveau fil (RécupérationCréditsBudgétaires, RécupérationInfosCréditsBudgétaires, FunctionIndiceCréditsBudgétaires (même nom ou plus court selon les possibilités)

Rechercher des sujets similaires à "cet article existe deja execute pas"