XL 2021 Création MsgBox

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
Grâce à plusieurs XLDnautes qui se reconnaîtront (et que je remercie pour leur savoir et leur patience), j'ai pu réaliser un utilitaire pour faire mes courses au Supermarché.
Mais les courses du lundi ne sont pas les même que celles du vendredi. Le vendredi, je dois donc sélectionner les choix effectué le lundi (Effacer le contenu) mais ne surtout pas supprimer ces lignes qui répondent à des requêtes très spécifiques.
Manuellement, ça marche. Je voudrais pouvoir automatiser cet effacement à partir d'un MsgBox. J'ai bien vu quelques propositions très intéressantes dans les forums XLD mais je ne sais ni où ni comment insérer ces ligne de code dans VBE.
Si vous pouvez m'aider, j'en serais très heureux.
Pierre
 

Pièces jointes

  • Essai.xlsm
    12.4 KB · Affichages: 11
Solution
Le problème, c'est ne sais pas où (Module, Worksheet ou autre) copier ta formule. J'ai fait plusieurs essais et je me plante à chaque fois.
C'est pourtant simple et tu sais le faire...
Tu créées un bouton <Effacer> comme tu as créé tes autres boutons:
1686327674265.png

Et sur le nouveau bouton tu affectes une macro (exemple de code en message #2) que tu auras placée dans un module quelconque.

Constantin

XLDnaute Occasionnel
Supporter XLD
Je sais ce que vous allez me dire :) :
"Ce que l'on conçoit bien s'énonce clairement et les mots pour le dire arrivent aisément" (Nicolas Boileau-Despréaux)
Je vais essayer à nouveau... Après mes courses du lundi je prépare celle du vendredi (c'est un exemple). Je vais donc repartir sur une liste vierge d'où l'effacement des contenus des cellules A2 à E (par exemple E100 - ça fait déjà une bonne liste de courses à caser dans le Caddy). Au vu des indications contenues dans les différentes macros et autres ComboBox, les têtes de colonne semblent nécessaires (à minima, leur affichage est nécessaire pour la lisibilité de ma liste de courses)
Je n'ai pas eu le temps de suivre les précieuses indications Dudu2 (pour l'heure le bouton "Effacer les données" n'est associé à aucune macro). Je vais m'y employer dès que possible. Je vous joins mon fichier en chantier.
Bien à vous,
Pierre
https://www.dicocitations.com/auteur/4753/Nicolas_Boileau_Despreaux.php
 

Pièces jointes

  • courses _Dudu2_UF_NR.xlsm
    219.6 KB · Affichages: 1

TooFatBoy

XLDnaute Barbatruc
Bonjour @TooFatBoy,
Oui, c'est possible mais ce n'est pas ce que @Constantin veut faire car cela effacerait les colonnes A et B qu'il veut conserver, ce qui n'est pas clair dans son explication initiale.
Je crois que ce sont seulement les formules qu'il veut garder, et vu que tu as eu l'excellente idée de remettre un TS, les formules sont conservées même si on supprime toutes les lignes. 😉

Et petit rappel (ou pas ;)) pour l'ami Constantin : pour ajouter une ligne, il suffit de sélectionner la dernière cellule du tableau puis d'appuyer sur la touche <Tab>.
 
Dernière édition:

Constantin

XLDnaute Occasionnel
Supporter XLD
Je crois que ce sont seulement les formules qu'il veut garder, et vu que tu as eu l'excellente idée de remettre un TS, les formules sont conservées même si on supprime toutes les lignes. 😉

Et petit rappel (ou pas ;)) pour l'ami Constantin : pour ajouter une ligne, il suffit de sélectionner la dernière cellule du tableau puis d'appuyer sur la touche <Tab>.
ça, c'est une bonne idée qui m'évitera les insérer etc...
Bon WE à vous tous
Pierre
 

Dudu2

XLDnaute Barbatruc
Ok alors moi je n'ai toujours pas compris :eek:
Avant donc que d'écrire, apprenez à penser.

Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.

Hâtez-vous lentement, et sans perdre courage,
Vingt fois sur le métier remettez votre ouvrage,
Polissez-le sans cesse, et le repolissez,
Ajoutez quelquefois, et souvent effacez.
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Et en plus ça marche !
Bonjour,

Ne serait-il pas possible d'effacer les courses comme ceci :
VB:
    With Range("t_ListeCourses")
        .Delete
        .ListObject.ListRows.Add
    End With
Hello TooFatBoy,
Si tu visualises t-ListeCourses, tu constates que cette table couvre les lignes A à F. La colonne F, pour peu que tu regardes son contenu contient une formule qui permet d'afficher la localisation en regard de la table provenant de Listes et des cellules contenues dans les colonnes I et J de Feuil1
Pour autant, je peux essayer de renseigner une table (t-donnees par exemple) qui couvrirait les colonnes A à E en partant de la ligne 2.
A +
Pierre
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Juste le temps de l'écrire...
Hey!
Tu écris plus vite que moi... Ta macro est parfaite sauf qu'elle n'efface pas les contenus des colonnes A et B en partant de la ligne 2.
J'ai essayé d'ajouter deux lignes dans la macro "Effacer les courses" pour effacer le contenu de ces cellules... Ça bugue et bien sûr je ne comprends pas pourquoi. Problème de syntaxe ?
En tous cas, le reste est nickel ! :)
Si tu as une idée,
Merci encore, on y est presque (j’exagère en disant "on")
Pierre,
 

Pièces jointes

  • courses _Localisation_Dudu2 Scroll-2.xlsm
    215.8 KB · Affichages: 0

Dudu2

XLDnaute Barbatruc
S'il faut tout effacer...
En réalité, il faut, comme l'a fait @TooFatBoy, tout supprimer et recréer une ligne sinon le DataBodyRange est Nothing.
C'est un peu le problème des tableaux structurés vides qui font quand même apparaître une ligne qui n'existe pas pour VBA.
 

Pièces jointes

  • courses _Localisation_Dudu2 Scroll.xlsm
    227.6 KB · Affichages: 3
Dernière édition:

Dudu2

XLDnaute Barbatruc
C'est un peu le problème des tableaux structurés vides qui font quand même apparaître une ligne qui n'existe pas pour VBA.
Voilà ce que ça génère comme code superflu quand il faut gérer la pseudo-ligne non existante d'un tableau structuré vide s'il faut considérer le cas d'un DataBodyRange Is Nothing.

VB:
Sub a()
    Dim NCol As Integer
  
     With ActiveSheet.ListObjects("t_ListeCourses")
        NCol = .ListColumns("CATÉGORIE").Index
      
        If .DataBodyRange Is Nothing Then
            If Not Intersect(Selection, .HeaderRowRange(NCol).Offset(1)) Is Nothing Then
                MsgBox "Traiter"
            Else
                MsgBox "Pas traiter"
            End If
        Else
            If Not Intersect(Selection, .ListColumns(NCol).DataBodyRange) Is Nothing Then
                 MsgBox "Traiter"
            Else
                MsgBox "Pas traiter"
            End If
        End If
     End With
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Ok alors moi je n'ai toujours pas compris :eek:
Tu veux dire par rapport à sa demande d'effacement de la liste ???

Si c'est ça, en fait c'est simple : l'ami Constantin demandait de ne pas effacer certaines colonnes parce qu'il ne savait probablement pas, d'une part que les TS gardent les formules et MEF même quand ils sont vides, et d'autre part que tes ComboBox ne sont pas "en dur" dans les cellules du TS mais que la méthode que tu utilises pour faire apparaître tes ComboBox est basée uniquement sur la sélection d'une cellule d'une des deux premières colonnes du TS.
Du coup il a adapté sa demande à ce qu'il pensait faisable ou non faisable, et non à ce qu'il souhaite réellement, qu'il pensait plus compliqué voire impossible.

Du moins, c'est ce que, moi, j'ai interprété dans sa demande. Mais peut-être me trompé-je... 😕
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Hello TooFatBoy,
Si tu visualises t-ListeCourses, tu constates que cette table couvre les lignes A à F. La colonne F, pour peu que tu regardes son contenu contient une formule qui permet d'afficher la localisation en regard de la table provenant de Listes et des cellules contenues dans les colonnes I et J de Feuil1
Pour autant, je peux essayer de renseigner une table (t-donnees par exemple) qui couvrirait les colonnes A à E en partant de la ligne 2.
Là en revanche, c'est ben moi que j'ai rien compris... 🤪
 

TooFatBoy

XLDnaute Barbatruc
Tu écris plus vite que moi... Ta macro est parfaite sauf qu'elle n'efface pas les contenus des colonnes A et B en partant de la ligne 2.
J'ai essayé d'ajouter deux lignes dans la macro "Effacer les courses" pour effacer le contenu de ces cellules... Ça bugue et bien sûr je ne comprends pas pourquoi. Problème de syntaxe ?
En tous cas, le reste est nickel ! :)
Toutafé ! La macro de l'ami Dudu2 est nickel ! 👍

Si tu apportes la modif que j'indiquais plus haut (en #15), elle sera en bronze. 😉
 
Dernière édition:

Constantin

XLDnaute Occasionnel
Supporter XLD
Bon, j'ai fait comme j'ai pu en essayant de respecter mes impératifs et vos conseils. En gros :
- je ne supprime pas les lignes mais j'efface simplement leur contenu. Je conserve une liste de quelques 50 localisations qui m'évite de tirer sur mon tableau dès qu'il est dépassé par le nombre de produits.
J'ai modifié le format de la date et heure d'enregistrement. Je vais aussi choisir un autre nom plus court pour mon fichier de base.
Le fichier que je vous mets en pièce jointe est la toute dernière version brute (avant filtre, ordre).
Vous n'auriez pas été là, je ne serai arrivé à rien.
Mille mercis à nouveau !
PS : J'ai archivé tous vos conseils dans un fichier de formules que je tiens à jour depuis plus de dix ans... Il va prendre du poids grâce à vos propositions.
Pierre (@Constantin pour Dudu2)
 

Pièces jointes

  • courses _Dudu2_UF_NR.xlsm
    221.1 KB · Affichages: 1

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 107
dernier inscrit
cdel