Macro qui fonctionne en "pas à pas" mais pas complète en auto

Bonjour à tous,

Lors de la conception d'un fichier Excel je vois que nous pouvons aller de problématique en problématique.

La dernière fois baroute a résolu mon problème. J'en rencontre un autre à présent que je n'arrive pas à résoudre car les solutions proposées (en retournant le net) ne répondent pas à ma problématique. Je m'explique :

Je suis entrain de concevoir une base de données "alimentaire" afin de pouvoir gérer des plans alimentaires.

Conception des plans alimentaires comme ceci :

image

Avec des listes déroulantes en cascade dans la colonne "CATEGORIES" et "ALIMENTS".

j'ai, sur une seconde feuille, une base de données que nous pouvons alimenter en ajoutant/supprimant une catégorie :

image

Avec des macros pour :

- ajouter une ligne

- supprimer une ligne

- actualiser tout le fichier excel. (j'en viens à ma problématique).

Sur une troisième feuille, une requête permettant de répertorier toute la base de données en "liste" afin de pouvoir concevoir mes listes déroulantes en cascade :

image

Mon problème étant le suivant :

Lors de l'ajout d'une nouvelle ligne de donnée dans la feuille 2 donc ma "LISTE DES ALIMENTS" je dois actualiser le fichier pour que cette nouvelle catégorie apparaissent dans la requête. Jusqu'ici aucun soucis pour l'actualisation via VBA. La où ça se complique pour moi c'est que je dois cliquer 2 fois sur mon actualisation afin que celle ci apparaissent dans mes listes déroulantes en cascade.

Dans la VBA actualisation j'ai aussi implanté un code permettant la suppression des plages "en erreur" dans le gestionnaire de noms ainsi qu'une actualisation dans ce même gestionnaire de noms afin d'alimenter mes listes déroulantes en cascade.

Le code VBA pour l'actualisation est donc le suivant :

Sub Actualiser_tout()
'
Dim repertoire_liste As Range
Set repertoire_liste = Range("BAROUTE__2[#All]")

' Actualiser_tout Macro

' Actualiser le fichier
ActiveWorkbook.RefreshAll

' Ajustement des colonnes de A à G
Columns("A:G").Select
Columns("A:G").EntireColumn.AutoFit
Range("H2").Select

' Supprimer les noms en défaut
Dim Nms As Name
For Each Nms In Names
If Nms.RefersTo Like "*REF!*" Then Nms.Delete
Next

' Actualiser le fichier
ActiveWorkbook.RefreshAll

'Afficher la feuille "baroute"
'Sheets("LISTE DES ALIMENTS").Select
'Sheets("Baroute").Visible = True

' Renommer les listes
Sheets("Baroute").Select
ActiveWorkbook.RefreshAll
repertoire_liste.Select
Selection.CreateNames Top:=True, Left:=False, Bottom:=False, Right:= _
False

'Masquer la feuille "baroute"
'ActiveWindow.SelectedSheets.Visible = False

' Revenir sur la liste des aliments

' Actualiser le fichier
ActiveWorkbook.RefreshAll

End Sub

J'ai beau utiliser un DoEvents ou un Application.Wait Now() + TimeValue("00:00:02") rien n'y fait. Je suis obligé de cliquer deux fois sur actualiser pour que la nouvelle catégorie soit prise en compte dans les listes déroulantes en cascade.

image

Pas de plage nommée "TESTE" dans le gestionnaire de noms en auto :

image

Auriez vous une idée d'où peut venir le problème ?

Je vous remercie d'avance pour votre aide :)

Bonjour,

Je trouve que tu t'embêtes beaucoup pour une BD alimentaire J'en utilise une quotidiennement depuis 10 ans (environ 3000 produits) et il ne me serait jamais venu à l'idée d'utiliser des catégories et des listes en cascades. Évites au contraire les regroupements trop fins il vaut mieux avoir 25 lignes de Boeuf, 25 lignes de Porc que 200 lignes de viandes...

Utilise un Listview avec un filtre à initiale et basta...

A vrai dire je n'utilise mes catégories que pour de rares recherches un fois par an mais c'est plutôt pour des stats...

Je dis ça j'ai rien dit hein ! Et maintenant je vais éplucher ton code mais c'est pas du brillant hein !

T'aurais pas plutôt un fichier à proposer ?

Et puis en plus tu actualises quoi ? Tu peux pas tout mettre tout dans le même classeur ? J'ai bien l'impression que tu te compliques la vie pour le plaisir !

A+

Bonjour à tous,

Tout d'abord je tiens a vous remercier de votre réponse. Cependant, et sans aucune once de méchanceté je ne pense pas avoir demandé l'avis de quelqu'un concernant le projet et le fichier que je souhaite mettre en place :) De plus, ceci est un projet qui peut en cacher un autre du même genre. Juste de l'aide concernant le code que j'ai cité ainsi que la problématique.

Bien évidemment, je prends note du conseil d'éviter les regroupements trop fins. Car tout conseils peut être bon à prendre, mais pas le jugement. Me dire que mon code n'est pas du brillant sans m'en donner les explications ne me fera pas avancer dans mon apprentissage du VBA Excel :)

J'ai bien sûr le fichier test pouvant être analyser que je mets en PJ.

L'actualisation est l'actualisation du fichier Excel dans son ensemble. En effet, afin que les nouvelles catégories puissent s'ajouter dans la feuille de la "requête" l'actualisation doit être opérée.

Tout est bien évidemment dans le même classeur.

Merci de votre réponse en tout cas :)

33test-2-2.xlsm (175.16 Ko)

bonjour Skyy, salut Galopin01,

pour la validation de la cellule G14 (et les cellules suivantes) la formule contient in "$" de trop

=INDIRECT($E14)

Puis tout se met à jour avec des évenements (voir macro dans la module de la feuille "liste des aliments"

24test-2-2.xlsm (178.47 Ko)

Bonjour à tous,

rien à voir avec ton pb mais un truc me gène dans ton code.
C'est ActiveWorkbook.RefreshAll
1) Je ne sais pas ce que tu penses que fait RefreshAll mais en fait ça rafraichit les TCD, et tu n'en as aucun dans ton classeur
2) ActiveWorkbook c'est le classeur actif, qui peut être n'importe lequel selon l'utilisateur.
Ici ça ne pourra pas faire de dégâts mais avec d'autres instructions tu peux pourrir d'autres fichiers si tu les enregistres sans le voir, et mettre des mois sans comprendre le pourquoi et comment ça arrive.
Si c'est le classeur de la macro qui est concerné c'est ThisWorkbook.
eric

Bonjour bonjour !

BsAlv je n'ai pas tout compris, mais il me semble (je peux me tromper) que la formule n'a pas d'incidence direct avec ma problématique. En effet dans le fichier que tu as repartagé je vois que tu as rajouté "fruit nouveau 2" dans la catégorie "FRUITS". Or cette catégorie existe déjà donc est bien prise en compte dans la liste des aliments.

C'est justement quand je veux créer une nouvelle catégorie que l'actualisation ne se fait pas du premier coup. Exemple : je souhaite créer la catégorie "FRUITS DE MER" "Huitre", je vais bien avoir l'actualisation dans la feuille plan alimentaire au niveau des CATEGORIE (donc je vais bien retrouver la catégorie FRUITS DE MER) MAIS je ne vais pas pouvoir avoir l'aliment "Huitre" du premier coup. Il faudra, pour arriver à ce résultat, que j'actualise 2 fois le fichier.

eriiic bonjour,

Je te remercie pour cette précision, je vais pouvoir changer cela. Effectivement je comprends le sens de tes remarques et c'est très logique. Cependant Le RefreshAll n'actualise pas seulement les TCD, mais aussi les requêtes de ce que j'ai pu remarqué, que j'ai justement dans ce fichier.

re,

j'ai supprimer les autres macros, pourqu'il n'y a pas d'erreurs.

Ca fonctionne sans interventions

30test-2-2.xlsm (176.42 Ko)

Re,

Rafraichit les sources de données externes.
J'avais l'impression que tout était dans ton classeur...

@eriiic, je pensais cela aussi...

Rechercher des sujets similaires à "macro qui fonctionne pas complete auto"