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

25tests-ccm.xlsm (77.04 Ko)

Bonjour à toutes et à tous,

Mes meilleurs vœux d'heureuse année et de bonne santé à toutes et à tous, tant pour vous que pour vos familles. Que vos vœux les plus fous soient exaucés.

UserForm UF01_Création : procédure cbNomArticleMenu_Change : il est prévu des instructions pour recherche existence article qui appelle la procédure RécupérationArticlesMenus; dans cette procédure, il est également prévu des instructions pour recherche existence article qui signale qu'une instruction doit être exécutée si l'article est existant et qui fait un appel à la procédure RécupérationInfosArticlesMenus qui, alors, doit faire apparaître les cb tels qu'ils ont été prévus dans ladite procédure. Or, le message d'existence ne s'exécute pas quand je choisis un article existant.

D'avance merci pour l'aide que vous voudrez bien m'apporter.

Bonjour,

Une proposition avec simplification de la fonction : IndiceArticlesMenus

35tests-ccm.xlsm (59.54 Ko)

Bonjour Thev,

Merci, j'ai bien le message qui s'affiche.

Serait-il possible d'avoir les instructions suivantes qui viennent d'un autre fichier ? si oui, où les mettre ? Évidemment, le nom des outils sera à modifier.

If MsgBox("L'article " & cbCAM.Value & " existe déjà." & vbCrLf & "Voulez-vous le modifier ?", vbExclamation + vbYesNo) = vbYes Then
'Modification acceptée.
Call RécupérationInfosArticle(I)
Else
'Modification refusée : effacement données.
cbCAM.Value = ""
cbCJAM.Value = ""
cbCCAM.Value = ""
tbAMNC.Value = ""
tbDCAM.Value = ""
tbQPR.Value = ""
End If
Else
'Article non trouvé : Réinitialisation données formulaire.
cbCJAM.Value = ""
cbCCAM.Value = ""
tbDCAM.Value = Format(Date, "d mmmm yyyy")
End If

D'avance merci pour votre aide.

Serait-il possible d'avoir les instructions suivantes qui viennent d'un autre fichier ? Lequel ???

NB: Pensez à utiliser la balise "</>" pour l’affichage de code.
15menus-2023.zip (505.15 Ko)

Premier mot de passe : MENUS 2023

Deuxième mot de passe : MENUS 2023

Bonsoir,

ci-jointe proposition

28tests-ccm1.xlsm (69.63 Ko)

Bonjour Thev,

Merci pour la proposition. Un petit hic : recherche existence article : le code article menu n'est pas conforme à celui de la feuille BD articles menus.

Bonjour,

ci-jointe nouvelle version

18tests-ccm2.xlsm (73.16 Ko)

Bonjour thev,

Merci. Cela fonctionne correctement maintenant.

Bonsoir thev,

J'ai imprimé ton dernier fichier. Pour m'aider afin d'aller plus vite, pourrais-tu me dire, s'il te plaît, les procédures qui ont été modifiées. D'avance, je t'en remercie. Dans le cas où cela t'ennuie, merci de me dire que tu préfères que j'emploie vous au lieu de tu. L'association Goutte d'or dont tu fais partie, elle est située à Paris ? Cela t'arrive-t-il de te déplacer chez les gens pour les aider informatiquement ? Si oui, à quelles conditions ?

Bonnes soirée, nuit et continuation. Prends bien soin de toi.

Bonjour thev,

Dans la procédure cbNomArticleMenu_Change, après les prédéfinitions, il y a '//Recherche existence article. Que signifienet les '// ?

D'avance merci pour votre réponse.

Pour m'aider afin d'aller plus vite, pourrais-tu me dire, s'il te plaît, les procédures qui ont été modifiées.

1- ajout d'une colonne "clé" pour faciliter la recherche, aux tableaux structurés : TabProduits et TabBDArticlesMenus

2- ajout d'une Frame : Frm_infos_articles dans le UserForm pour rationaliser l'effacement des données

3- modification procédure : cbNomArticleMenu_Change

Private Sub cbNomArticleMenu_Change()
    Dim i As Long
    Dim ctrl As Control

    'Effacer le contenu des cb et des tb si cbNomArticleMenu est vide.
    If cbNomNatureArticleMenu.Value = "" Then
        For Each ctrl In Me.Controls
            If TypeOf ctrl Is MSForms.ComboBox Or TypeOf ctrl Is MSForms.TextBox Then ctrl = Empty
        Next ctrl
        Exit Sub
    End If

    '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 conti-
    'nue. Il est recommandé d'utiliser cette formulation plutôt que l'instruction On Error GoTo pour accéder à des objets.
    On Error Resume Next
    With [TabProduits].ListObject
    'Renvoie l'indice de l'article du tableau structuré TabProduits pour la clé article définie si l'article existe. Renvoie zéro si l'article
    'n'existe pas.
        i = 0
        i = Application.Match(cbNomArticleMenu & cbNomNatureArticleMenu, .ListColumns("Clé produit").DataBodyRange.Value, 0)
        If i > 0 Then tbCodeArticleMenu = .ListColumns("Code produit").DataBodyRange(i)
    End With
    'Invalide dans la procédure en cours tout gestionnaire d'erreurs validé
    On Error GoTo 0

'........................................................................

    '// Recherche existence article.

    i = IndiceArticlesMenus 'IndiceNom articlemenu dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus.
    'Si i supérieur à zéro alors.
    If i > 0 Then   'Article trouvé.

        Call RécupérationArticlesMenus(i)

    Else            'Article non trouvé.

        'Effacement des infos article
        For Each ctrl In Me.Frm_infos_article.Controls
            If TypeOf ctrl Is MSForms.ComboBox Or TypeOf ctrl Is MSForms.TextBox Then ctrl = Empty
        Next ctrl
        Me.tbDateCréationArticleMenu = Format(Date, "d mmmm yyyy")

        'Génération de Numéro création article menu.
        tbNuméroCréationArticleMenu.Value = tbCodeNatureArticleMenu & "-" & Format(Application.CountIf(Range("TabBDArticlesMenus[Code nature article menu]"), tbCodeNatureArticleMenu.Value) + 1, "00")

        'Modification des libellés.
        Call ModificationLibellés
    End If

End Sub

4- modification procédure : RécupérationArticlesMenus

Sub RécupérationArticlesMenus(ByVal i As Long)
    Dim ctrl As Control

    'Article existant dans la feuille BD articles menus, tableau structuré TabArticlesMenus : va aller dans la procédure Sub RécupérationInfosArticlesMenus.
    If MsgBox("L'article " & cbNomArticleMenu.Value & " existe déjà dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus." & vbCrLf & vbCrLf & _
    "Voulez-vous le modifier ?", vbExclamation + vbYesNo) = vbYes Then
        'Modification acceptée.
        Call RécupérationInfosArticlesMenus(i)
    Else
        'Modification refusée : effacement données.
        For Each ctrl In Me.Controls
            If TypeOf ctrl Is MSForms.ComboBox Or TypeOf ctrl Is MSForms.TextBox Then ctrl = Empty
        Next ctrl
    End If

End Sub

5- modification fonction : IndiceArticlesMenus

Private Function IndiceArticlesMenus()
    Dim i As Long
    'Renvoie l'indice de l'article dans la feuille BD articles menus, tableau structuré TabBDArticlesMenus pour le cbNomArticleMenu défini si l'article existe. Renvoie zéro si l'article
    'n'existe pas.
    '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 conti-
    'nue. Il est recommandé d'utiliser cette formulation plutôt que l'instruction On Error GoTo pour accéder à des objets.
    On Error Resume Next
    With [TabBDArticlesMenus].ListObject
        i = 0
        i = Application.Match(tbCodeNatureArticleMenu & cbNomArticleMenu, .ListColumns("clé article").DataBodyRange.Value, 0)
        IndiceArticlesMenus = i
    End With
    'Invalide dans la procédure en cours tout gestionnaire d'erreurs validé
    On Error GoTo 0
End Function

Cela t'arrive-t-il de te déplacer chez les gens pour les aider informatiquement ?

Non. J'aide les gens dans le cadre des associations où je suis bénévole ou dans le cadre de ce forum.

Bonjour thev,

Merci pour ces précieux renseignements. À partir de ton fichier dont j'ai imprimé le code et la feuille, j'ai modifié mon fichier (c'est ainsi que je travaille : je ne suis pas fan des copier-coller) et j'ai plein d'erreurs. Au vu de ta réponse, j'ai compris le pourquoi de ces erreurs.

Pour ce qui concerne l'ajout des colonnes "clé" dans les tableaux structurés, bien vérifier dans votre classeur que l'option de recopie automatique des formules est cochée :

Options --> Vérification --> Options de correction automatique --> onglet : mise en forme automatique au cours de la frappe --> formules de remplissage dans les colonnes ....

Bonjour thev,

Merci pour l'astuce d'option-->Vérification-->options de correction automatique... c'est drôlement pratique.

Dans la procédure cbNomArticleMenu_Change, après les prédéfinitions, il y a '//Recherche existence article. Que signifienet les '// ?
Je mets '// pour le commentaire principal et ' pour les commentaires dépendants de celui-ci. C'est juste pour une meilleure lisibilité du code.

Bonjour thev,

Sauf erreur ou omission de ma part, j'ai reproduit textuellement l'objet Frame et le code de la procédure cbNomArticleMenu_Change selon les indications de votre fichier. Or j'ai une erreur en ce qui concerne le nom du frame dans la procédure cbNomArticleMenu_Change. Merci de m'aider.

12tests-ccm.xlsm (78.75 Ko)

Dans le code de votre fichier, quand on tape me.frm..., dans la liste déroulante, il y a bien frm_infos_article; quand on est dans le formulaire, dans la liste des objets, frm_infos_article n'apparaît pas. Résolu : j'ai enfin trouvé : il y a deux frames différents.

j'ai reproduit textuellement l'objet Frame

En fait, il y a 2 frames : le premier pour l'article = Frm_article , le second pour les infos de l'article = Frm_infos_article. Il manquait le second.

Par ailleurs, j'ai rectifié l’indentation incorrecte du code pour les Select case .. End Select. Ce qui le rend plus lisible.

27tests-ccm.xlsm (70.48 Ko)

Bonsoir thev,

Tu es vraiment très sympathique : tu es le seul à rectifier mes erreurs, à me renvoyer le fichier corrigé et, en plus, ce que j'apprécie, à ne pas m'engueuler pour les erreurs que je commets, le plus souvent involontairement.

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