Mettre en couleur des images avec VBA - ME
Bonjour à tous,
J'enrage ma vie sur un fichier que je dois présenter déjà à la bourre ! ça c'est normal
Voici mon souci.
je dois disposer 8 cartes de France qui doivent e coloriser selon le tableau situé à droite.
Ces 8 cartes de France représente les 8 produits que nous produisons et qui seront gérés par 3 transporteurs pour les livrer.
Le meilleur transporteur qui propose son meilleur tarif sur un département pour tel produit colorisera le département sur la carte concernée.
Pour l'instant, j'ai disposé que 2 cartes pour faire fonctionner le code VBA mais ça beug ! et je suis largué et ne comprend plus rien.
Quand je clique le bouton PAC4, il colorise bien les départements qu'il trouve dans la colonne PAC4 du tableau.
Quand je clique sur le bouton PAC5, il ne colorise pas sa carte mais celle d'à côté, celle de PAC4 au lieu de PAC5.
Je pense que c'est un problème de Shapes et GroupItems mais je n'arrive pas corriger ce problème.
Sachant que j'aurais 8 cartes avec chacun son bouton pour actualiser et lire les données de la ligne du tableau qui vivra en fonction des offres des transporteurs.
Je fais appelle aux experts, aux accros du codage ... je suis perdu, à force de triturer, je m'enfonce dans les sables mouvants...
Qui peut me venir en aide ... je vous remercie sincèrement
Bonjour Dorileo,
Je savais pas qu'on pouvait faire des cartes sous excel.
Pour le code j'ai du mal à m'y retrouver, et faute de trouver un spécialiste, il faudrait t'adresser à la personne qui t'a fait cette 1ére carte.
A+
Franck
Bonjour à tous,
L'explication est simple, mais la solution ... longue à mettre en œuvre.
Ici les 2 cartes de France sont des groupements de shapes avec 2 noms distincts : ok
MAIS ... les shapes composant ces 2 groupements ont les mêmes noms, exemple au hasard le Morbihan est nommé FR-56 dans les 2 groupements.
Donc quand on essaye de colorier le shape FR-56, le code prend le premier qu'il trouve.
La solution serait de renommer chaque shape de département par exemple avec le préfixe du nom du groupement, du genre CartePAC4_FR-56 et CartePAC5_FR-56, etc ...
Bon courage ...
Pierre
PS : sinon pour Fronck =>
http://tatiak.canalblog.com/archives/2021/02/28/38840204.html
Bonjour pierrep56,
J'ai renommé le dept 64 dans les 2 cartes PAC4 et PAC5, et çà change rien.
y'a surement qqchose à changer dans les macros coloriages, mais je les comprends pas.
Par exemple que veut dire ca = c.Offset(, 2) ?
A+
fronck
Bonjour à tous,
L'offset c'est un déplacement, ex c.offset(1,2) c'est à partir de la cellule C on se déplace de 1 ligne, 2 colonnes, c.offset(,2) => 0 ligne, 2 colonnes.
Sinon dans la carte, heum je ne constate pas de renommage de FR-64?
Mais si ce dept est nommé CartePAC4_FR-64 d'un côté et CartePAC5_FR-64 de l'autre (et aussi pour tous les autres départements), le code pour l'un devient
ActiveSheet.Shapes("CartePAC4_FR-" & c).Fill.ForeColor.RGB = couleur
et pour l'autre
ActiveSheet.Shapes("CartePAC5_FR-" & c).Fill.ForeColor.RGB = couleur
Bon ok, alors voilà ma proposition :
1/ ajout d'une "feuil1" avec une carte pour renommer le groupe comme on veut (ça ira plus vite pour les autres cartes à ajouter) :
- on dissocie éventuellement le groupe si les dept sont déjà groupés (/!\ important)
- on change le nom du groupe à donner en
A1 - on clique sur le bouton => on obtient ainsi un nouveau groupe à copier/coller dans l'onglet des cartes là ou on veut (avec modif du nom pour chaque dept).
2/ le code (uniquement) pour la CartePAC5 est modifié comme suit : ActiveSheet.Shapes("CartePAC5_fr-" & c).Fill.ForeColor.RGB = couleur
Et tout ça me semble fonctionnel
Pierre
Re
A la réflexion, on peut faire plus simple pour ne pas trop embêter le demandeur.
Sans renommer aucun shape, dans le code remplacer la ligne :
ActiveSheet.Shapes("fr-" & C).Fill.ForeColor.RGB = couleurpar la ligne :
ActiveSheet.Shapes("CartePAC4").GroupItems("FR-" & C.Value).Fill.ForeColor.RGB = couleurIci pour la carte PAC4, et faire de même pour les autres en adaptant le nom du groupe
Pierre
Re:
ok, j'ai changé le code pour la carte PAC4, ai fait un copié collé de la carte.
Mais j'arrive pas à renommer le module en PF4S, la carte suivante.
j'ai recopié le code de coloriage sur un coloriage3, çà bug pas mais çà change pas la carte.
J'ai essayé de créer un nouveau module pour voir s'il faut un module par carte, mais j'arrive pas à le renommer en PF4S
Ok, alors, voici le fichier avec qq modif :
* les boutons d'actions sont renommés en Bouton_1, Bouton_2, etc ... et pointent tous sur une seule procédure=>
Sub Coloriage_generique()dans laquelle on récupère le n° du bouton 1, 2, 3, ...(d’où le nouveau nom) pour l'offset et l'affichage sur le bouton PAC4, PAC5, PF4S pour faire référence à la bonne carte.
Et voilà pas plus
Pierre
PS pour renommer un bouton ou un shape, il faut sélectionner l'objet, saisir le nom souhaité dans la case en haut à gauche et valider avec la touche Enter
Le code générique :
Sub Coloriage_generique()
Dim C As Range, Ca As Variant, p As Long, couleur As Double, Carte As String, cl As Integer
With ActiveSheet
Carte = "Carte" & .Buttons(Application.Caller).Caption
cl = Right(Application.Caller, 1)
For Each C In [départ]
If C.Value <> "" Then
Ca = C.Offset(, cl).Value
p = Application.Match(Ca, [légende], 0)
If Not IsError(p) Then
couleur = .Range("légende").Cells(p, 1).Interior.Color
.Shapes(Carte).GroupItems("FR-" & C.Value).Fill.ForeColor.RGB = couleur
End If
End If
Next C
End With
End SubJe comprends rien :
PS pour renommer un bouton ou un shape, il faut sélectionner l'objet, saisir le nom souhaité dans la case en haut à gauche et valider avec la touche Enter
J'aimerais savoir comment tu colories avec une des sources: La liste à gauche des cartes ou la feuille tarifs poste standards DP.
Par écrit c'est pas simple de se comprendre, et si tu connais discord pour se parler c mieux. Mon serveur est : https://discord.gg/T43edUR3
Heu, la fatigue de la journée sans doute, mais je ne comprends pas la question? Désolé.
Sinon j'ai eu un peu plus de temps ce soir, alors voilà le fichier complété avec les 8 cartes et code nettoyé (sur site externe car trop lourd)
Bonne soirée
Pierre
Ps : avec une p'tite animation? saisie du nom puis touche [Enter]
Super bravo. Dorileo pourra te remercier.
Merci pour l'animation. J'ai fait la carte PF17 sur la feuil1, mais quand je veux rentrer carte PCR/PF17, il accepte pas le "/".
Il reste fixe sur la PF17 et ne veut même passer à la carte PAC4. le bouton1 bug aussi.
A+
Salut à tous,
Vos échanges sont très instructifs, je vous remercie à tous pour votre implication, vous êtes géniaux ! des vrais king ! je m'incline, respect à tous!
Je vais lire et regarder avec grande intention toutes vos idées et essais qui m'intéressent fortement.
Ce matin, je ne sais pas quel miracle, j'ai testé et tenté quelque chose qui fonctionne pour les 8 cartes. Je pense que mes codes sont un peu trop lourds et peuvent être compactés et simplifiés.
Ceci dit, cela fonctionne pour l'instant...je dois balayer des codes inutiles car c'est une carte que j'ai récupéré et détourné pour en faire un autre usage. J'ai des liens hypertextes à virer, le VBA ne les charge pas.
Je vous laisse le fichier si cela intéresse quelqu'un et qui souhaiterait en faire usage pour autre chose ou exploiter les codes.
Bien à vous
Pierre,
Ton code est une tuerie ! quelle classe ! Félicitations
J'adopte tt de suite...et je vais le mettre en service pour mon besoin.
Génial !
Merci à tous les autres qui ont apporté leur soutien, idée, implication et surtout au temps que vous avez accordé.
Sincères salutations à tous.
Merci pour ton retour, et à Pierrep56 pour sa patience.
N'oublies de clôturer le sujet.
