Développement et modification macro

Bonjour à vous tous je me suis permis de créer un sujet ici, si besoin n’hésitez pas à le déplacer si je n'ai pas posté au bon endroit,

J’ai dù changer de pc car mon ancien pc ne fonctionnait plus trop. Je suis donc passé à une nouvelle version du pack office (2016).

J'utilisais un fichier Excel avec une macro qui me servait beaucoup, Et lorsque j’ai ouvert mon fichier Excel , la macro ne fonctionnait plus.

Voici comment je procède:

J’importe la photo dans mon excel via le bouton "sélectionner une image", je clique sur « Généré une fresque à partir… », est là normalement la macro doit créer à peu près la même photo en la pixelisant.

C’est a dire que si sur la photo importée il y a du bleu en A1, la case Excel A1 doit se coloriser en bleu, ainsi de suite pour toute la photo.

Hors en ce moment

J’importe la photo :

capture2

Je génère, la photo reste en couleur, mais les cellules Excel de derrière ne se colorisent pas.

capture3

Alors que je devrais avoir ce résultat-là quand je fais glisser la photo de sa zone ( j’ai fait ça vite fait pour que vous compreniez mieux, cela ne ressemble à rien on est d’accord).

capture4

Après plusieurs recherches ici notamment et sur le web, si j'ai tout bien comprit, la macro ne marcherait plus car la version que j'utilise d"Open Office et trop récente (2016), du coup la macro que j’utilisais n'est plus compatible car mon ancienne version d'Open Office datait de 2007 ou 2010..

J'ai compris qu'il fallait changer le début de mon code, ce que j'ai fait mais sans résultat, je ne suis vraiment pas doué je pense haha.

J'avoue que je ne sais plus trop quoi faire pour le coup, car je me servais beaucoup de cette macro.

Après plusieurs échanges avec "LouReeD" (que je remercie beaucoup), il m'a orienté sur cette demande.

Je souhaiterais savoir si l'un d'entre vous pouvais me modifier mon fichier où m'en crée un nouveau je ne sais pas du tout, avec possibilité de dédommagement bien entendu si besoin, car j'avoue que cela me bloque pas mal en ce moment, n'hésitez pas à passer en MP.

Merci d'avance
Cordialement Vivi

Bonjour,

désolé, c'est encore moi qui répond !

Voyez le fichier joint, essayez le car je ne saisie pas tout, et donner votre ressenti à l'issue :

12fichier-1-lrd-v2.zip (562.17 Ko)

@ bientôt

LouReeD

Re,

Bas écouter je viens de le tester l'option sur la 1er page marche en effet, elle est un peu plus lente qu'avant mais cela reste un détail.

Pourquoi vous dite cela ?

Voyez le fichier joint, essayez le car je ne saisie pas tout, et donner votre ressenti à l'issue :

Vivi

Car je n'ai testé que la mise en place de l'image et la mosaïque, sans vérifier si tous les boutons fonctionnaient encore.

@ bientôt

LouReeD

Re,

je viens de tester l'ensemble des boutons sur la page 1 une tout me semble parfait.

J'ai donc voulu copier la formule sur la page 2 (GenerateWall), et là le flop pourtant c''est le même principe non ?

Vivi

Aïe ! Quel est le principe de cette deuxième feuille ?

@ bientôt

LouReeD

Re,

Exactement pareil sauf que les cellules excel ne sont pas placer pareil.

Attention !

Sheets(3) veut dire la troisième feuille du classeur en partant de la gauche pour la version française, mais vous n'avez que deux feuilles !

Il y a confusion entre le CodeName de la feuille (son nom système sous VBA) "Sheets3" et son index, le code tourne si vous mettez Sheets(2).

Sur ma version je n'ai pas fait les modification de code, du coup le curseur se déplace bien par trois fois sur l'image mais pas de couleur...

@ bientôt

LouReeD

Je viens de modifier le numéro de la feuille, mais cela na marche pas non plus.

vivi

Pour l'histoire de la rapidité, c'est du au fait que je n'ai pas placé cette ligne de code
L = GetWindowDC(0)
au bon endroit !
Il suffit de la mettre juste avant la boucle de i :
L = GetWindowDC(0)
For i = 0 To Rows - 1

En effet une fois qu'on a récupéré les donnée de l'écran, plus besoin de relancer cette récupération !

@ bientôt

LouReeD

Re,

Je viens d'effectuer le changement que vous m'avez dit mais je ne vois pas de différence concernant la vitesse

En effet une fois qu'on a récupéré les donnée de l'écran, plus besoin de relancer cette récupération !

Je n'ai pas compris votre deuxième parti de message .

Vivi

Bon, pour la vitesse, le fichier ci dessous va bien :

Effacé par LouReeD

Le principe : copie de l'écran en mémoire, scan de l'image qui est en mémoire pour la recopie des couleur dans les cellule, avec l'image choisie, moins de 1 seconde pour 47 colonnes et 41 lignes !

Reste plus qu'à rajouter tous les autres options ! Ou bien d'adapter ce code à votre fichier

@ bientôt

LouReeD

Voici un fichier :

il suffit d'importer une image, de régler sa taille à l'écran : plus elle est grande et moins elle sera pixélisée.
Un comptage de "forme" est fait sur la feuille et s'il ne correspond pas "à l'attente" alors un message en informe l'utilisateur et le processus est abandonné.
Une routine de comptage de couleur avertie s'il y en a de trop et informe que cela peut nuire à la qualité de sortie de la mosaïque.
Il y a donc là la possibilité d'annuler le processus.

En fin de processus, un message vous indique le temps passé puis le nombre de colonne et de ligne qu'occupe la fresque.

@ bientôt

LouReeD

Bonjour,

Je viens de regarder de plus prés ce fichier, et en effet il va très très vite, chez moi il y a juste une attente (comme si excel ramait) avant de valider le nombre de couleurs. Une fois valider cette étape en presque 1 seconde la mosaïc est créée c'est super.

C'est même incroyable

Vivi

Le temps de latence est du au scan de l'image avec mise en mémoire des différente couleur qui la compose afin de prévenir qu'il peut y avoir des "trous" car Excel ne peut afficher plus d'environ 16000 mise en forme différente, donc une image avec plus de 16000 couleur ne sera pas complète, il y aura des cellules vides.

En plus, comme le travaille se fait sur une image en mémoire, et qu'il y a le DoEvents, l'utilisateur pendant le traitement peut faire autre chose... Mais pour cela il faudra modifier le ciblage de la feuille résultat en modifiant "ActiveSheet" par Sheets(1) par exemple, comme cela si l'utilisateur change de feuille c'est tout de même la feuille 1 qui recevra les informations de couleur. Dans ce cas également il faudra supprimer l'instruction screenupdating.

Mais bon, vu que cela met 1 seconde pour la création... Vous avez remarquez aussi la modification de code pour le test du nombre de photo ?

@ bientôt

LouReeD

Re,

Oui j'avais remarqué que je pouvais faire autres choses en même temps, ce qui est super pratique je l'avoue et qui ne me dérange pas du tout.

Mais comme vous dites entre la durée de latence, et la durée de création cela prend beaucoup moins de temps que sur mon fichier excel c'est juste parfait pour moi.

Vous avez remarquez aussi la modification de code pour le test du nombre de photo ?

Non je n'ai pas remarqué cela en quoi consiste t'il ?

Vivi

ActiveSheet.Shapes.Count

on compte le nombre de shapes "tout confondus" sur la feuille, vous avez 16 boutons, il ne faut qu'une image donc le Count doit être égale à 17, si plus alors plus d'une image, si moins alors pas d'image... Cela évite la boucle For Each Image in ActiveSheet.Shapes...

@ bientôt

LouReeD

Re,

Je débute vraiment sur excel et je vous avoue que la je n'ai pas tout comprit (Boulet mode on )

Vivi

Bonsoir,

Shapes (avec un S) est la collection des objets de type Shape qui se trouve sur une feuille, cela peut être des formes , des objets formulaires, les commentaires, les boutons etc... "Count" est l'instruction qui permet de compter l'objet auquel il se rattache, du coup Shapes.Count permet de compter le nombre de Shape qui se trouvent dans la collection Shapes, du coup on sait qu'il y a 18 shapes sur la feuille, on en veut 16 (les 16 boutons de commande de l'application) + 1 (l'image que l'on veut pixéliser) = 17. si le compte est inférieur à 17, il n'y a pas d'image à pixéliser, si c'est supérieur il y a trop d'image à pixéliser.

Ceci évite de faire la boucle dans la collection avec le For Each To Next.

@ bientôt

LouReeD

Bonjour,

Ha oui d'accord en effet, j'ai maintenant tout comprit.

Tout est plus clair grâce à vous, merci encore.

Rechercher des sujets similaires à "developpement modification macro"