Gestion Image/Tableau
Bonjour à tous,
J'ai besoin de votre aide ! Je suis en train de me faire une feuille de calcul qui requiert l'utilisation de plans, et d'y superposer des valeurs.
Pour cela j'ai donc besoin de modifier mon tableau excel en ayant une image par dessus.
Là on pourrait se dire "eh facile, y a qu'à la mettre en arrière plan ou filigrane !" ... mais que neni !
1/ Il y a une quinzaine de tableaux et donc la même image à superposer une quinzaine de fois, sur une même feuille.
2/ Je cherche à ce que l'image reste visuellement "au dessus" mais que je puisse modifier mon tableau comme si elle était "en-dessous", voilà la petite subtilité.
J'espère que l'on va arriver à trouver une solution
Hadrien
Edit : Je vous joins un printscreen pour vous donne rune idée
Hello,
Voici une petite propo, je pense que ça devrait coller à ta demande.
Le principe est de mouvementer l'image koala à chaque événement de changement dans la feuille, sur la cellule A1.
Je pense que le principe peut convenir à ton souci.
Sub Dépla_image_sur_cell() 'mettre l'image sur cellule A1
ActiveSheet.Shapes.Range(Array("Picture 1")).Top = ThisWorkbook.Worksheets(1).Range("A1").Top
ActiveSheet.Shapes.Range(Array("Picture 1")).Left = ThisWorkbook.Worksheets(1).Range("A1").Left
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dépla_image_sur_cell
End Sub
Salut waard !
D'abord merci pour ta réponse
Toutefois la solution que tu proposes n'est pas efficace dans ce cas ci. Le problème n'étant pas de fixer l'image car finalement elle ne bougera plus une fois placée. En effet, la complétion du tableau se fait à l'aide des repères visuels du plan format image qui est par dessus la feuille.
Par exemple pour la zone A1 au nord West sur le plan, je vais remplir toutes les cases qu'elle délimite avec une valeur.
Il est assez fastidieux de cliquer à côté de l'image et de remplir les cases une à une avec seulement les flèches du clavier.
L'idée c'est de pouvoir remplir le tableau normalement en gardent l'image "par dessus" le tableau.
Si je ne suis pas très clair hésitez pas à me dire quels points il faudrait que je précise
Et si ça se trouve ... ça n'est juste pas possible ...
C'est pas difficile, c'est une question d'organisation du fichier, par contre de mémoire mon calcul de déplacement de la sélection de la cellule plante avec un zoom >100%, ça prend d'autres cellules, donc il faut rester avec un zoom à =<100%.
J'ai fais un tuto pour l'explication du concept ici :
Par contre, ici j'ai une démo, avec une image et la possibilité d'utiliser la souris normalement (tu peux changer les options d'actions du cureur, en appuyant sur les boutons poussoirs d'option (c'est le fichier MouseEvents gestion du clic souris dans MouseMove.xlsm au milieu de la page) :
Voilà à quoi ça ressemble, si je suis encore réveillé ça colle à ton pb :
Tiens nous au courant si c'est ok ou si tu as encore des soucis.
Je vais me lancer dessus demain et voir si je peux le mettre en place. Mais par contre le problème du zoom est très ennuyeux. Je pense que tu as vu la taille du plan et des cellules : je suis souvent autour des 40% de zoom plutot.
Merci pour ton aide en tous cas =)
Hello,
Après pour les zooms avant supérieur à 100% faudrait chercher le coef de régu et remettre à jour la table, je pense.
Effectivement pour le zoom, j'avais mal lu et tu avais déjà précisé que pour dézoom ça fonctionnerait : MB
Je suis en train d'essayer de mettre en place cela. Ca fonctionnera mais du fait du code qui est derrière, je doute que ça sera utilisable : le nombre de cellules que je dois traiter est bien plus grand que du 6x6 pour un jeu de plateau excel. Ici 1 plan est en 51x74, et vu que mon plan se répète en couches, je tombe sur du 806x74 (Il y a en fait sur une même feuille le plan qui se répète 15 fois à peu près. ). Le calcul des positions en automatique devient alors trèèèès laborieux pour l'ordinateur. Le fichier est en fait déjà énorme et j'y ai multiplié les calculs et les interconnexions entre les cellules et les feuilles.
Je termine pour 1 seul plan (51x74) pour voir si ça fonctionne dans un premier temps
J'ajoute qu'une petite erreur s'est glissée dans ton tuto :
La formule correcte pour la cellule K2 est : =RECHERCHEV(K4;C10:D46;3;VRAI)
Je rencontre toutefois un petit problème : Cliquer sur le masque me renvoi bien à une cellule, mais pas la bonne ^^
J'enlève les parties sensibles de mon fichier puis je te le joins pour que tu puisses voir
EDIT : Le fichier faisant 3,58 MO, il ne m'est pas possible de le joindre ...
Re:
Passe par www.cjoint.com tu peux y mettre des fichiers jusqu'à 15mo, c'est un service de cloud qu'on utilise beaucoup ici.
Et donc ci-joint (
Hellsoir,
Effectivement ton fichier est très lourd et très grand, je ne pense pas qu'étendre mon idée sur 16 zones soit calculable sans problèmes, déjà sur mon ordinateur où il y'a un Intel Core i7, j'ai du désactivé le calcul auto, pour arriver à faire le calcul de la position de la souris.
Néanmoins j'ai réussis à trouver une solution, en gardant mon idée de fonctionnement.
1/ Garder le calque activex (MAP) toujours visible
Mais étant donné la taille de l'image, pour avoir 1 calque visible on se retrouverai avec un zoom à 20%, donc point 2/.
2/ Habiller l'image de fonds avec plusieurs calques activex.
ça fait un calque à placer au-dessus de l'image en haut à gauche, haut au centre, haut à droite, bas à gauche, bas au centre, bas à droite.
ça permet de voir en gros un bon gros quart de l'image.
Pour gérer le fait de garder visible les calques où se trouve la souris, il a fallut que j'ajoute une plage de données, qui sert d'interupteur, en dessous du tableur de calculs de la position de la souris. ça évitera de calculer 50 fois de suite le recentrage. ça le fera uniquement si on change de calque.
3/ Ce point sera édité plus tard // Relatif aux ajouts de variables d'ajout de calculs pour les positions
Du fait de la position des calques et qu'il y'en ait plusieurs, il faut prendre en compte des décalages dans les X,Y , mais un graph sera plus parlant, je mettrais un scan de mon croquis.
Tu peux toujours pour le moment, entrer dans les cellules en appuyant sur entrer ou autre, au moins pour l'instant, tu arrivera déjà à mieux déplacer la sélection cellule vers ton but.
Comme tu peux le voir, avec ce type d'organisation de codage, il faudrait donc refaire 16 fois le codage, donc un boulot d'1 semaine à vue de nez, juste pour ça. Et même pas sûr que tu arrive à faire fonctionner le fichier à cause de sa lourdeur.
Je pense que tu devrais plutôt garder 1 cadre comme zone de travail, où tu aurais tes calques activex pour déplacer ton curseur cellule.
Et y faire défiler une carte une à une, en y important les données des zones archivées sur demande, en évitant le calcul automatique au maximum.
Allez il est tard a+
C'est assez impressionnant ce que tu as réussi à faire !
Ton avis soutiens celui que je me faisais : il n'est pas possible d'appliquer ce type d'outil sur un fichier de cette dimension
A moins d'avoir un ordinateur de la nasa ... ce que je n'ai pas à ma disposition ^^
De plus le temps pour le codage représente un investissement trop important, alors je vais laisser tomber pour ce qui est des "6x16 calques".
Je pense que tu devrais plutôt garder 1 cadre comme zone de travail, où tu aurais tes calques activex pour déplacer ton curseur cellule.
Et y faire défiler une carte une à une, en y important les données des zones archivées sur demande, en évitant le calcul automatique au maximum.
Je pense comprendre l'idée : seulement 6 calques activex avec cette methode (pour une grille), et la grille est "interchangeable" avec les 15 autres. Toutefois je ne saurais pas du tout comment faire sachant que les données des 16 grilles sont nécessaires simultanément afin de calculer des bilans par la suite (non présents sur le fichier)
En ce qui concerne le fait de limiter les calculs automatiques : j'ai essayé de le faire, mais je ne vois pas où je pourrais "rogner". Peut être as-tu vu des points d'amélioration ?
Je te remercie encore ô grand gourou d'Excel
Passe une bonne journée!
Hello,
Hadrien1900 a écrit :Je pense comprendre l'idée : seulement 6 calques activex avec cette methode (pour une grille), et la grille est "interchangeable" avec les 15 autres. Toutefois je ne saurais pas du tout comment faire sachant que les données des 16 grilles sont nécessaires simultanément afin de calculer des bilans par la suite (non présents sur le fichier)
C'est ça, il y'a plusieurs méthodes possible, tout en excel est possible, s'il n'y a de format cellule perso (couleur, gras,...), sinon vba. C'est compliqué, dans le sens où il faut organiser une maquette définitive du fichier à utiliser et s'y conformer durant la vie du fichier, histoire de dire aux formules ou au code, où aller chercher les infos.
En vba, par exemple, j'ai une appli https://www.excel-pratique.com/fr/telechargements/utilitaires/geromemo-gestionnaire-excel-de-memos-no281.php, dans la même idée, au lieu de défiler des cadres, on y défile des mémos dans l'onglet qu'on peut modifier,...
Hadrien1900 a écrit :En ce qui concerne le fait de limiter les calculs automatiques : j'ai essayé de le faire, mais je ne vois pas où je pourrais "rogner". Peut être as-tu vu des points d'amélioration ?
De ce que j'ai vu, les fonctions vba du fichier consomme beaucoup de temps de calculs, à voir si tu ne peux pas faire plutôt un calcul de MàJ sur demande, plutôt qu'en temps réel et désactiver les macros.
En gros, en temps normal le fichier est en mode calcul manuel et les macros sont désactivées.
Et à l'aide d'un bouton tu fais 1 fois, un calcul de MàJ des formules du fichier et 1 réactivation des macros.
- Pour désactiver les événements vba, ça doit peut être marcher pour les fonctions, pas testé.
c'est Application.EnableEvents = false et true pour réactiver
- Dans les fonctions vba, peut être qu'en désactivant l'affichage, ça accéléra un peu le code, au début de la fonction mettre
application.screenuptdating = false et à la fin du code true pour MàJ l'affichage.
- Mettre le fichier en calcul manuel et à l'aide d'un bouton utiliser le code activesheet.calculate par exemple pour MàJ les calculs de la feuille.
Le code du bouton donnerait
( * ) =>
sub activ_deactiv
Application.EnableEvents = true 'réactive les macros événements et les calculs des fonctions
activesheet.calculate 'on recalcule la feuille 'pendant cette ligne la feuille se met à jour, plus ou moins longtemps
'... après le calculate la feuille retourne en auto à son mode de calcul manuel
Application.EnableEvents = false 'on désactive à nouveau les macros événements et les calculs des fonctions
end sub
Ici j'ai fait une petite explication https://forum.excel-pratique.com/cours-astuces/accelerer-un-code-t28674.html
il y'a plusieurs méthodes possible, tout en excel est possible, s'il n'y a de format cellule perso (couleur, gras,...), sinon vba
J'utilise justement le remplissage des cellules pour faciliter la caractérisation des zones ^^
J'avais déjà vu ton post justement sur l'optimisation des fichiers excel !
J'ai ajouté un petit bouton avec ta formule pour rendre manuel le recalcul des formules
Je pense qu'on a bien creusé tout ça et qu'on ne pourra pas aller plus loin malheureusement. Merci Tristan
Sur le même fichier, j'aurai voulu ajouter une fonctionnalité, et peut être sais-tu comment la réaliser ?
Cela consisterait en la création d'un nouveau rapport automatiquement, déclenché par le remplissage d'une cellule, avec récupération de données d'une colonne.
Le rapport consiste en une trame ressemblant à l'image ci jointe.
L'idée c'est qu'un rapport par jour se crée et se complète automatiquement pour donner "une forme" aux données déjà ajoutées dans les onglets précédents. Les rapports sont archivés les uns à la suite des autres, sur un même onglet ou pas.
Toi qui est là depuis longtemps, peut être dois-je créé un nouveau sujet pour ce problème ?
Re:
Hadrien1900 a écrit :Cela consisterait en la création d'un nouveau rapport automatiquement, déclenché par le remplissage d'une cellule, avec récupération de données d'une colonne.
Le rapport consiste en une trame ressemblant à l'image ci jointe.
L'idée c'est qu'un rapport par jour se crée et se complète automatiquement pour donner "une forme" aux données déjà ajoutées dans les onglets précédents. Les rapports sont archivés les uns à la suite des autres, sur un même onglet ou pas.
Si on change de sujet, il faut créer un nouveau sujet. C'est mieux lors des recherches de solution sur google, d'avoir des sujet bien spécifique. Il doit y avoir des forumers qui ont des modeles de publipostage de démo tout prêt je pense. Et il y'a plus de chance que tu trouve plus d'intervenants sur le thème du publipostage, en partant d'un sujet nouveau.
Je pense qu'il faudra suivre les grands points ci-dessous pour ton algho :
1/ Je pense que pour que le rapport se lance en auto, il va falloir utiliser l'évent feuille Worksheet_Calculate ou Worksheet_Change.
Perso je suis pas fan de l'automatisation par évent, si fausse manip, on aura un rapport inutile, mais à voir suivant le process de travail.
2/ Après pour le rapport, tu as déjà un modèle de rapport fixe, donc oui tu aura besoin de savoir où récupérer les variables qui iront remplir les cellules du rapport.
C'est simple, je pense que tu va surtout utiliser cette formule :
'Cellule destinataire de la valeur variable du rapport cellule source de la variable à importer dans le rapport
thisworkbook.worksheets(1).range("A1").value = thisworkbook.worksheets(2).range("B1").value
3/ Une fois rempli, je ne pense pas que faire 365 onglets, en suivant le principe d'1 rapport par jour, soit une bonne idée au vue de la lourdeur du fichier, mieux vaut enregistrer un fichier par jour dans un dossier en personnalisant le nom par la date du jour.
Sinon le code à utiliser sera (codage simple qui se récupère par l'enregistreur de macro) :
Sheets("Feuil1").Select
Sheets("Feuil1").Copy After:=Sheets(1)
ça copie la feuille 1 par exemple où se trouverait le rapport, pour placer la copie à la fin du fichier.
4/ sauvegarder le fichier, important puis faire un RAZ des variables de l'onglet où tu calcul le rapport pour le prochain calcul, sinon risque de parasitage de mauvaise données dans le suivant.
Note: tu peux transformer une plage excel avec image au-dessus en une image, ça pourrait te servir.
C'est simple même sans code ça se fait, tu copie une sélection de cellules et colle là en collage spécial image.
D'accord merci pour toutes ces infos
Je crée un nouveau sujet pour connaître l'avis des autres