Cet article existe déjà : ne s'exécute pas
- Messages
- 717
- Excel
- 2010 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
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
- Messages
- 717
- Excel
- 2010 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
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 ?
- Messages
- 717
- Excel
- 2010 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
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
- Messages
- 717
- Excel
- 2010 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
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)