Dois je passer par VBA?

Bonjour,

Je travaille sur un fichier Excel et j'ai besoin d'aide

J'ai un onglet avec une table contenant une liste d'outils (jusqu'a 50) sur une periode de Janvier 2013 a Decembre 2017, mois par mois. Soit une table de 50 x 60

Dans chaque cellule, je peux definir un nom de machine (13 machines possible)

J'ai ensuite 13 onglets (1 onglet par machine)

POur chaque machine, je veux pouvoir recopier le nom de l'outil s'il a ete attribue a une machine dans le 1er onglet

Exemple 1:

Je definis dans mon 1er onglet que l'outil ABC est attribue a la machine #1 sur toute la periode Janvier 2013 a Decembre 2017 Je rempli donc toutes les cellules avec "Machine #1"

Je veux donc que dans l'onglet Machine #1, le nom de l'outil (ABC) soit recopie dans la cellule "Outil" puisqu'il a ete attribue a cette machine

Exemple 2:

Toujours dans le 1er onglet, je definis un outil XYZ qui est pendant 1 an sur la mahcine 1, puis l'annee suivante sur la machine 2, et revient enfin sur la machine 1

Il faut donc que le nom de l'outil (XYZ) soit recopie dans Machine #1 mais aussi dans machine 2

J;ai fais un exemple simplifie de ce que je souhaite faire. Il n'y a pas de formule, c'est juste pour montrer ce que je veux obtenir.

Les infos sont saisies dans l;onglet Outil, et les noms des outils doivent etre recopies automatiquement dans les onglets Machine #1 et Machine #2

Je pense que ca doit passer par du code VBA avec une boucle, mais je ne sais pas comment faire...

Merci pour votre aide

Bonjour french_guy,

Tu peux élaborer une trame commune pour chaque machine avec la liste des 50 outils.

Dans chaque feuille machine, pour chaque outil, une formule va vérifier dans la feuille "Outils" si la machine est associée à l’outil durant la période Janvier 2013 a Décembre 2017 .

Pour avoir la liste, il suffit alors d’appliquer un filtre automatique.

9exemple.zip (13.47 Ko)

A+

Comment fais tu pour reduire en automatique les lignes a seulement celles necessaire, pour ne pas voir toute la trame si il n'y a pas d'outils?

Dans le classeur que je t'ai transmis, tu peux voir qu'un filtre automatique est appliqué sur les colonnes Outils et Diam des feuilles "Machine".

Grâce à ce filtre, on sélectionne les cellules non vides.

A+

OK et merci, c'est un bon debut

Mais y a t'il un moyen de faire la meme chose sans creer une trame de 50 lignes pour chaque machine?

Meme si j'ai la possibilite de creer 50 outils, il y a en tout 13 machines dans mon application. Donc j'estime a 10 le nombre maximum d'otuils par machine

De plus pour chaque onglet machine (qui peut donc avoir un maximum de 10 outils), j;ai un graphique montrant la charge represnente par chaque outil (en %)

Si je fais une trame de 50 outils possible par machine - fois 13 machines - il faut que je definisse 13 fois les 50 champs pour les courbes......Ca risque d'etre trop long a creer et ca me donnera un fichier lourd en terme de taille !!!

frangy a écrit :

Dans le classeur que je t'ai transmis, tu peux voir qu'un filtre automatique est appliqué sur les colonnes Outils et Diam des feuilles "Machine".

Grâce à ce filtre, on sélectionne les cellules non vides.

A+

J'essaie d'implementer cette solution....Mais dans mon application, mes feuiiles machine sont un peu differentes de l'exemple

Chaque cellule representant un outil est en fait 4 cellules fusionnees ensemble

Donc quand j'applique la formule =IF(COUNTIF(........)), ca marche pour la 1ere cellule mais pour les autres, quand je fais un copier/coller de la formule, ca prends les valeurs avec des increments de 4

Comment "forcer" Excel a prendre des increments de 1?

La liste des 50 outils n’est nécessaire que si n’importe lequel de ces 50 outils peut être utilisé sur la machine. Si tu es capable de définir une liste de 10 outils prédéterminés, la liste peut être réduite.

Je prends pour exemple la formule de la cellule D4, feuille "Machine #1".

=SI(NB.SI(Outils!$E3:$AB3;$A$1)>0;Outils!C3;"")

Je traduis : si la Machine #1, a été notée sur la ligne correspondant à l'outil_1 dans la feuille "Outils", alors on note cet outil dans la liste.

Maintenant, rien ne t'empêche d'effectuer cette opération sur 10 outils prédéterminés plutôt que sur les 50 outils. Il suffit simplement de limiter la liste ces outils.

Par exemple, pour sélectionner uniquement les outils 1, 3 et 5, tu noteras respectivement

=SI(NB.SI(Outils!$E3:$AB3;$A$1)>0;Outils!C3;"") puisque Outils!C3 (correspond à l'outil 1),

=SI(NB.SI(Outils!$E5:$AB5;$A$1)>0;Outils!C5;"")puisque Outils!C5 (correspond à l'outil 3),

=SI(NB.SI(Outils!$E5:$AB5;$A$1)>0;Outils!C7;"")puisque Outils!C7 (correspond à l'outil 5).

A+

Merci pour toutes ces infos

Mais je dois garder la possibilite de d'allouer n'importe quel outil de la liste sur n'importe quelle machine.....

Je sais par contre que je ne devrais pas avoir plus de 10 outils par machine (normalement), c'est pourquoi j'avais limite ma trame a 10 outils possible par machine

Pour la formule, commment faire pour la copier/coler sur les 49 autres cellules mais en "forcant" un increment de 1?

Keep cool !

Si tu poses de nouvelles questions sans attendre les réponses aux questions précédentes, ça va être un joyeux foutoir dans pas longtemps.

Pour ta dernière question (tu sais, celle que tu as posée avant que je réponde à la deuxième), je ne peux pas répondre sans voir précisément à quoi ressemblent les données.

A+

Ooops....sorry

Les posts ont du se croiser

J'ai modifer l'exemple que tu m'avais renvoye, ou tu pourras voir a quoi ressemble la trame pour les machines

16exemple.zip (13.47 Ko)

J'ai fait un essai en creant une trame identique (50 lignes) pour 2 machines. Le fichier est passe de 3Mb a presque 5Mb

Donc j'imagine que si je fais ca sur les 13 machines au total, mon fichier va depasser allegrement les 10Mb !!!

Il faut que je trouve une solution pour garder les 10 "emplacements" par machine.....

Je pense qu'il doit y avoir une astuce avec du VBA, mais je ne sais pas laquelle malheureusement......

J'ai repris ton fichier en créant une trame identique (50 lignes) pour 2 machines. J’ai renseigné intégralement la feuille "Outils" jusqu’en décembre 2017. J’arrive à 112 Ko (très loin des 5Mb annoncés). Ce qui me laisse à penser que ton original n’a pas grand chose à voir avec l’exemple.

Concernant la structure de ton tableau, je te conseille vivement d’éviter la fusion des cellules, cela t’éviteras quelques déboires. La copie incrémentée sur une cinquantaine de cellules ne pose pas de grande difficulté. Par contre, j’ai bien compris que tu souhaitais t’orienter vers une solution VBA.

Personnellement, je ne suis pas du tout persuadé que cette programmation présente un réel intérêt, d’autant plus qu’il va falloir que tu gères la modification des 3000 cellules de la grille "Outils".

Je passe donc la main à celui ou ceux qui auront plus d’idées que moi pour ce sujet.

Essaie de donner un exemple réellement représentatif du classeur original (sans données confidentielles) sinon c’est la galère assurée.

A+

Merci Franguy pour ton temps passe sur mon sujet...

J'ai effectivement donne un exemple tres basique

J'ai fait l'essai de creer les 50 lignes pour les 13 machines.........J'arrive a un fichier de presque 14Mb !!!

Le fichier d'origine, avec 10 outils possible maximum, a une taille de 3,2Mb

Je joins une version du fichier d'origine, sans donnee, avec seulement 1 machine et sans graphe pour garder la taille en dessous des 300kb

Le mode d'emploi est le suivant:

1) Les outils sont definis dans le 1er onglet (jusqu'a 50 outils possibles)

2) Toujours dans ce meme onglet, pour les outils qui sont definis, il faut attribuer la/les machine(s) - ca peut etre 1 seule machine pendant toute la periode (5 ans) ou alors 1 machine pendant 6 mois, 1 autre machine pour 2 ans, etc....

3) Dans l'onglet Machine, il faut que le nom du ou des outil(s) soit recopie(s) dans les cellules en rose si des outils ont bien ete attribues a cette machine

4) Voila en quelque mots le principe de fonctionnement. Comme on peut definir 50 outils mais qu'il y a seulement 13 machines, j'ai estime qu'un maxiumum des 10 outils par machine devrait etre suffisant

Je pense donc a une sorte de boucle en VBA, mais je ne sais pas comment faire.....

J'imagine quelque chose du genre:

Pour B6, regarder si Yearly to Daily!AA5="Mach #1"

Si Oui, alors copier la valeur de Yearly to Daily!D5 dans B6 et passer a B10

Si Non, tester cellule suivante (AB5)

Et ainsi de suite

Merci d'avance a ceux qui peuvent penser a une solution.....

J'ai corrige un petit detail dans l'exemple (nom de la machine en haut a gauche pour chaque feuille "Machine")

J'ai aussi rajoute une 2eme machine pour que l'exemple soit plus "parlant"...

Rechercher des sujets similaires à "dois passer vba"