Colorer celule adjacente de même couleur sous condition

Bonjour LoureeD

voilà, j'ai créé une doc en feuille 3

j'ai également changé la forme indiquant le do du milieu

je voulais que C4 apparaisse dedans mais c'est pas encore au point

j'aurai préféré une étoile noire avec le texte centré...

j'aurais aussi aimé avoir avec le bouton doc un popup qui affiche la page 3...

Je viens de tester un premier titre avec un élève (je suis prof de piano)...

Constat:

le pdf n'a pas voulu s'adapter format portrait à la taille du papier.. des marges seraient la cause?

peut être faudrait il qu'au de là de X accords le pdf crée une nouvelle page?

(cette dernière solution n'est pas la meilleure à mon avis, mais peut s'avérer obligatoire si le morceau fait 20 accords...)

et mon bouton "Doc" n'a rien à faire là...

du coup, j'ai fais un export de la page en jpg

les champs elysees

constat,

nickel mais le titre aurait finalement été le bienvenu

et

je viens de retoucher le fichier pour avoir les accords à gauche beaucoup plus gros..

et étiquette noire réussie pour le do du milieu (C4)

dernière version:

PS: peut être le sujet de ce topic devrait être renommé en Diagramme d'accords piano ?

et voilà la dernière version avec le bouton doc qui fonctionne.

(c'est du bidouillage mais ça fonctionne)

Bonsoir,

version 12 ! Effacé par LouReeD

J'ai renommé les 7 boutons "système" du haut. Comme cela avec une petite boucle avant impression on peut facilement les rendre invisibles, puis une fois l'impression faites on les rend visible.
J'ai modifié certain code afin de "jouer" avec l'instruction Union afin d'ajouter le titre du morceau à chaque impression de clavier et lors des impression "individuelles" un code de "masquage" des lignes entre le titre et le clavier afin de n'avoir qu'un clavier sur l'image.

Bref, on a bien une exportation en JPG total avec le titre sans les boutons, une exportation en JPG total individuellement avec le titre sans les boutons, et une exportation JPG individuelle avec le titre.

Pour le PDF sur plusieurs feuilles le fichier joint montre la faisabilité mais il faudrait gérer les sauts de page afin de ne pas avoir de découpage de clavier...

Donc reste encore un peu de retouche à faire.

@ bientôt

LouReeD

Bonjour

c'est super, merci !

à modifier : supprimer le titre du morceau lors d' export individuel jpg d'accord (bouton à gauche), comme c'était ...

( car un seul accord ne peut pas représenter un titre mais peut en revanche être utilisé dans d'autres applications)

ne pas imprimer ni exporter la ligne indications de jeu si vide

(vous pouvez placer ces indications sur une autre page comme vous le pensiez, mais j'ai juste peur d'oublier cette page quand je vais créer des diagrammes et les exporter )

un bouton reset pour repartir sur une feuille vierge

un bouton imprimer bien sur (que j'ai oublié dans mon exemple)

et peut être si pas trop compliqué les boutons +1 et -1 à gauche de chaque accord (également sur la source) pour ajouter ou retirer une octave plus simplement

voir cet exemple

pour finir

protégez votre fichier (super programme) et conservez les droits d'auteur

un menu ou bouton préférences

sauvegarderait nos préférences dans un fichier.ini , le programme les respecterait à chaque ouverture

et permettrait de

1.partir sur une feuille 3,4,5 ou 6 octaves par défaut (et pour tous les accords ajoutés)

2.avoir systématiquement le C4 indiqué par défaut (mais restant déplaçable)

3.le choix des couleurs Main gauche et main droite

4.avoir le fameux "About" où vous vous présenterez

5.de faire une zone texte où l'auteur place son nom qui doit apparaitre sur les exports multi jpg, single jpg, pdf , print (cases à cocher)

du coup,

tous les boutons du haut ne seraient ils pas mieux dans un UserForm ?

visuellement permanent et déplaçable

c'est juste une idée, bien que j'aime les interfaces intégrées comme vous l'avez fait et c'est très bien aussi

Ps: je pars une semaine en vacances mais je pense pouvoir suivre le sujet .

encore merci pour tout ce que vous avez fait...

à bientôt

Bonsoir,

avant votre départ en vacances voici une version qui reprend plusieurs de vos idées : Effacé par LouReeD

@ bientôt

LouReeD

Bonjour,

Petite amelioration sur le fichier en cours : correction du centrage du titre du morceau et des indications de jeu en fonction de la taille du plus grand clavier.

Quelque soit l'alignement ce sont toujours le cellules B1 et B2 qu'il faut remplir.

Pour l'impression il faut gérer les saut de page tout comme pour l'export en PDF. Pour l'export en JPG pas besoin car c'est fait sur une seule image.

@ bientôt

LouReeD

Bonjour, merci pour ces modifs

j'ai internet là ou je suis, mais pas d'excel installé sur mon portable...

je ne peux donc que vous lire.

Ps, je pense qu'il manque la pièce jointe à votre dernier message.

à bientot

Bonjour

Non non il ne manque pas la pièce jointe, c'est volontaire, j'attends d'avoir le temps de peaufiner.

@ bientôt

LouReeD

Bonsoir,

Bon j'ai fait le ménage sur mes posts en supprimant les versions intermédiaire de l'application. La version "finale" est proche avec :

Un menu en USF affichable ou pas,
Les boutons équivalent sur la feuille, comme cela en fonction des envies de chacun soit on gère depuis la feuille soit on gère depuis le USF.
Le choix de deux types de boutons pour le USF : soit les austères rectangles et gris, soit les customisés avec des images simplistes (icônes) des actions possibles.
Une série de bouton "propres" à chaque clavier comme l'ajout ou la suppression d'une octave.
Centrage du titre et des indications de jeu en fonction de la plus grande longueur de clavier de la feuille.
Gestion de la position visuelle du Do Middle.
Exportation individuelle du clavier en JPG.
Exportation individuelle de tous les claviers en JPG.
Exportation de la feuilles d'accords en JPG avec le titre et indication de jeu.
Exportation de la feuille d'accords en PDF avec le titre et indication de jeu, il reste la gestion des sauts de page à faire.
Reste le bouton "Impression" qui doit gérer le découpage de la feuille d'accords sur plusieurs pages s'il le faut sans "découper" un accord en deux !

Alors il faut que je retourne travailler pour finaliser ceci !

En plus si je dois intégrer les idées de "réglages" proposé par podi ! Une chose est sur, point de "verrouillage" de prévu, tout est free comme à mon habitude !

@ bientôt

LouReeD

Super

c'est génial, j'ai pu tester votre dernière version

je ne sais pas où vous en êtes de la zone indications de jeu (B1,B2) , mais j'ai essayé de l'entrer en C2 (zone bien plus grande) et ça fonctionne .

encore une grosse amélioration pourrait rendre le soft tip top:

deux boutons: -1 transpose +1

pour la (les) feuille(s) complète(s)

possible?

je m'explique: cette fonction nous permet de jouer le morceau dans une autre tonalité (plus aiguë ou plus grave)

très utile !

sachant qu'entre chaque touche du clavier , il n'y a qu'un demi ton

-1: descend toutes les touches d'un demi ton (décale toutes les touches colorées d'une touche vers la gauche)

+1: monte toutes les touches d'un demi ton(décale toutes les touches colorées d'une touche vers la droite)

ça modifierai donc tous les accords de la feuille en un seul clic

exemple ici

accord d'origine= E (mi majeur)

+1 passerai en Fa

-1 passerai en Mi bémol

...et me vient encore deux idées

un bouton dupliquer accord (sous octave-1 +1) car très souvent, il n'y a pas grand chose qui change d'un accord à l'autre.

ça permet de retoucher un accord sans quasiment tout devoir recopier...

j'espère être clair, Lou avait commencé comme ceci d’ailleurs dans ses premières versions avec la fonction ajouter un accord

un bouton sauvegarder ?

sauvegarde le fichier en le nommant grâce au titre et évite de modifier le programme original

Bonjour,

Bon ben la version finale n'est pas pour tout de suite...

@ bientôt

LouReeD

Bonsoir,

transpose +1 est codé !
Je continue !

@ bientôt

LouReeD

Bonjour, et bravo !

j'espère que vous n'avez pas eu à refaire tout le code...

je m'en veux un peu de vous donner tout ce travail

Ps: dans votre dernière version, l'export (pdf) n'utilise plus le titre

Bonsoir,

l'impression et le PDF "gèrent" les sauts de page !

Je reprend tout mon code de "transposition" car lors de la présence d'une dizaine de clavier le temps d'exécution est trop long ! En effet le code est basé sur des boucle For Each In Shapes, et à chaque nouveau clavier c'est presque 60 shapes qui sont à gérer en plus, sans compter le fait des ajouts d'octaves !
Donc avec des boucles imbriquées cela commençait à durer longtemps ! Le code en question, juste pour montrer l'idée :

Sub TransposePlus()
    Dim Lig, Sh, Sh2, Col, ColTest, Flag

    Lig = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row - 8

    ' on doit partir de la droite vers la gauche pour ajouter un demi ton
    ' on cherche le shape du clavier le plus à droite
    For Each Sh In ActiveSheet.Shapes
        If Sh.TopLeftCell.Row = Lig Then
            ColTest = Sh.BottomRightCell.Column
            If ColTest > Col Then Col = ColTest
        End If
    Next

    For I = Col To 3 Step -1
        Flag = False
        For Each Sh In ActiveSheet.Shapes

            If Sh.TopLeftCell.Row = Lig And Sh.TopLeftCell.Column = I And Left(Sh.Name, 1) = "N" And (Sh.Fill.ForeColor.RGB = RGB(255, 0, 0) Or Sh.Fill.ForeColor.RGB = RGB(0, 0, 255)) Then
                For Each Sh2 In ActiveSheet.Shapes
                    If Sh2.TopLeftCell.Row = Lig And Sh2.TopLeftCell.Column = I + 1 And Left(Sh2.Name, 1) = "B" Then
                        Sh2.Fill.ForeColor.RGB = Sh.Fill.ForeColor.RGB
                        Sh.Fill.ForeColor.RGB = RGB(0, 0, 0)
                        Flag = True
                        Exit For
                    End If
                Next Sh2
            End If

            If Sh.TopLeftCell.Row = Lig And Sh.TopLeftCell.Column = I And Left(Sh.Name, 1) = "B" And (Sh.Fill.ForeColor.RGB = RGB(255, 0, 0) Or Sh.Fill.ForeColor.RGB = RGB(0, 0, 255)) Then
                For Each Sh2 In ActiveSheet.Shapes
                    If Sh2.TopLeftCell.Row = Lig And Sh2.TopLeftCell.Column = I And Left(Sh2.Name, 1) = "N" Then
                        Sh2.Fill.ForeColor.RGB = Sh.Fill.ForeColor.RGB
                        Sh.Fill.ForeColor.RGB = RGB(255, 255, 255)
                        Flag = True
                        Exit For
                    End If
                Next Sh2
                If Flag = False Then
                    For Each Sh2 In ActiveSheet.Shapes
                        If Sh2.TopLeftCell.Row = Lig And Sh2.TopLeftCell.Column = I + 1 And Left(Sh2.Name, 1) = "B" Then
                            Sh2.Fill.ForeColor.RGB = Sh.Fill.ForeColor.RGB
                            Sh.Fill.ForeColor.RGB = RGB(255, 255, 255)
                            Flag = True
                            Exit For
                        End If
                    Next Sh2
                    If Flag = False Then
                        For Each Sh2 In ActiveSheet.Shapes
                            If Sh2.TopLeftCell.Row = Lig And Sh2.TopLeftCell.Column = Col - 1 And Left(Sh2.Name, 1) = "B" Then
                                Sh2.Fill.ForeColor.RGB = RGB(255, 255, 255)
                                Flag = True
                                Exit For
                            End If
                        Next Sh2
                    End If
                End If
            End If
            If Flag Then Exit For
        Next
    Next I

End Sub

Mais cette reprise de code engendre la reprise du code de numérotation des shapes ! Mais cette "difficulté" à la mise en place donnera satisfaction à l'utilisation !
ce code ne gérer pas la "sortie" des touches du clavier !

@ bientôt

LouReeD

Bonsoir,

Donc voici l'idée utilisée : numérotation des claviers contrôlés. En effet avec l'ancien code on scrutait les shapes de la collection shapes et alors ces derniers étaient numérotés en ordre croissant fonction de leur ordre de création. Si trois claviers étaient créés, puis un octave sur le premier clavier, alors la numérotation des touches du premier clavier n'était pas continu ! Ingérable !

Maintenant à chaque ajout de clavier et d'octave, la ligne de référence de ce dernier est récupérée, puis avec cette dernière on renumérote de gauche à droite l'ensemble des touches. Le codage : N ou B pour le type de touche, puis 4 digit pour coder le numéro de ligne, puis un tiret pour séparer ce numéro de clavier du numéro de colonne où se trouve la touche, on obtient donc pour la première touche blanche du premier clavier : B0004-3 !

Sub Init_Noms(Lig As Long) 'procédure permettant de renommer les touches si des copier/coller sont fait pour augmenter le nombre de claviers ou d'octave
    Dim Sh

    For Each Sh In ActiveSheet.Shapes
        If Sh.TopLeftCell.Row = Lig And (Left(Sh.Name, 1) = "B" Or Left(Sh.Name, 1) = "N") Then
            If Left(Sh.Name, 1) = "B" Then
                Sh.Name = "B" & Format(Lig, "0000") & "-" & Sh.TopLeftCell.Column
            Else
                Sh.Name = "N" & Format(Lig, "0000") & "-" & Sh.TopLeftCell.Column
            End If
        End If
    Next

End Sub

Et là même si le scan des shapes n'est pas chronologique, c'est le numéro de colonne qui rendra les touches chronologique !

Une fois les touches numérotés de façon contrôlé, il est simple de gérer un clavier en particulier car on peut facilement trouver l'ensemble des touches, pour cela il nous faut la ligne de référence puis la colonne Max du clavier qui dépend des octaves ajoutés. Pour cette info j'ai code une fonction :

Function ColMax(Lig As Long)
    Dim Octa, Nom
    Octa = 24
    On Error Resume Next
    Do
        DoEvents
        Nom = ActiveSheet.Shapes("B" & Format(Lig, "0000") & "-" & Octa).Name
        If Nom = "" Then
            ColMax = Octa - 1
            Exit Do
        End If
        Nom = ""
        Octa = Octa + 7
    Loop
End Function

avec laquelle "sous gestion d'erreur" je cherche la première note des octaves éventuellement ajouté : si le shape existe, une octave d'ajoutée, alors on va cherche la prochaine touche 7 colonne plus loin, si le shape n'existe pas alors la colonne max est celle du test moins 1 !

L'info de la ligne de référence est fonction du bouton cliqué sur la gauche du clavier : on connais le bouton cliqué, on récupère son numéro de ligne et on soustrait le nombre de ligne adéquate pour arriver à la ligne de référence.

Maintenant on connait la liste des notes du clavier, elles ont pour premier nom: "B" & Format(Lig,"0000") & "-3" et en dernier nom : "B" & Format(Lig,"0000") & "-" & Col

On ne bouclera plus sur l'ensemble des shapes mais seulement ceux du clavier ce qui fait que les codes de tranposition ne sont plus dépendant du nombre de clavier et leur exécution est plus rapide ! Pour comparaison ci dessous le code de la transpose +1 :

Sub TransposePlus()
    Dim Lig As Long, Col, Nom, I

    Lig = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row - 8
    Col = ColMax(Lig)

    With ActiveSheet
        On Error Resume Next
        For I = Col To 3 Step -1
            If .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB <> RGB(255, 255, 255) And I = Col Then
                Exit Sub
                .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB = RGB(255, 255, 255)
            Else
                Nom = .Shapes("N" & Format(Lig, "0000") & "-" & I).Name
                ' si pas de touche noire
                If Nom = "" Then
                    ' si la touche blanche est colorée alors on colore la touche blanche de droite et on blanchie celle testée
                    If .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB <> RGB(255, 255, 255) Then
                        .Shapes("B" & Format(Lig, "0000") & "-" & I + 1).Fill.ForeColor.RGB = .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB
                        .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB = RGB(255, 255, 255)
                    End If
                ' s'il y a une touche noire
                Else
                    ' si la touche noire est colorée alors on colorie la touche blanche de droite
                    If .Shapes("N" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB <> RGB(0, 0, 0) Then
                        .Shapes("B" & Format(Lig, "0000") & "-" & I + 1).Fill.ForeColor.RGB = .Shapes("N" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB
                        .Shapes("N" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB = RGB(0, 0, 0)
                    End If
                    ' si la touche blanche est colorée alors on colore la touche noire de droite
                    If .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB <> RGB(255, 255, 255) Then
                        .Shapes("N" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB = .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB
                        .Shapes("B" & Format(Lig, "0000") & "-" & I).Fill.ForeColor.RGB = RGB(255, 255, 255)
                    End If
                End If
                Nom = ""
            End If
        Next I
    End With
End Sub

Alors voici la dernière version qui n'embarque pas la recopie du dernier clavier ni même le bouton de sauvegarde. L'imprimer est en place mais comme pour le PDF je n'en suis pas satisfait donc encore un peu de travail !

Le fichier :

11piano-ultimate-v1.zip (956.79 Ko)

@ bientôt

LouReeD

Bonjour Lou

Pour la gestion des pages, pdf ou jpg ou imprimante

je pense que dans un premier temps, les morceaux ne feront pas plus d'une vingtaine d'accords

alors ne peut on pas réduire la taille des accords pour que la totalité s'adapte systématiquement à la page?

même si ils sont plus petits, ça reste lisible .

ça reste à mon avis la solution idéale: réduire l'échelle pour s'adapter au format A4

Sinon, je constate que chaque accord occupe 14 lignes

soit un total de 6 accords maximum par pages à l’échelle actuelle

du coup, peut être qu'une nouvelle page pourrait être crée chaque 90 lignes environ (en ajoutant les 3 premiers lignes sur la première page)

Pour le transpose

vous avez fait un travail remarquable

cependant, cette fonction transpose serait bien plus utile pour toute la feuille (tout le morceau) si possible

pour un seul accord, autant le créer manuellement, ça reste plus rapide sans trop forcer

Donc placer ces boutons en haut ou dans le USF

d'autre part, si nous restons sur 3 octaves représentés

le programme pourrait il

soit décaler de 11 touches (demi tons) au dessus, ou 13 touches au dessous dans le cas de dépassement des limites?

soit ajouter une octave au dessous ou au dessus selon le cas

je m'explique:

ici do majeur

do majeur

je veux transposer -1

impossible...

sauf si au lieu de faire -1 je fais +11 et décale le C4 en rajoutant une octave bien sur

ou si j'ajoute simplement une octave au dessous

0

à ce sujet, je pense que 4 octaves dés le départ serait plus judicieux, car 3 reste un peu limité

et donc plus vraiment besoin de code car moins de limites, et ça fonctionne tel quel

Bonjour,

les modifications sont en cours !

Donc sur le USF (avec copie sur la feuille comme cela on s'adapte à "tout le monde") :
Un bouton ajout Clavier (accord)
Un bouton efface les couleurs de tous les claviers
Un bouton efface tous les claviers avec maintenant une MsgBox de confirmation
Un bouton "+ 1 1/2 ton"
Un bouton "- 1 1/2 ton"
Un bouton Export JPG de tous les claviers (accord) individuellement (avec ou sans consigne de jeu et titre ?)
Un bouton Export JPG de tous les claviers sur une seule image avec titre et consigne de jeu
Un bouton Export PDF de tous les claviers avec titre et consigne de jeu (gestion des multipages à voir)
Un bouton impression de la feuille entière (gestion des multipages à voir)
Un bouton pour afficher l'aide
Un bouton "quitter l'USF"

La plupart de ces boutons se retrouvent sur la feuille avec un bouton supplémentaire pour afficher le USF.

Je dois revoir la numérotation des claviers car en cas de suppression et d'ajout des doublons se forment.

@ bientôt

LouReeD

je pense que pour un export d'accords individuels, le titre et consigne ne servent à rien.

seul le nom des accords reste utile.

ces images doivent servir à de l'éducatif et dans d'autres titres... donc pas de titre ni consigne.

les boutons transpose de la dernière version donc uniquement en haut ou au menu (transpose morceau entier)

en revanche, le bouton dupliquer accord peut remplacer cette cellule.

Bonsoir,

je suis resté sur une version avec des octaves +/-, est-ce toujours d'actualité ?
Si oui, le transpose, doit il s'arrêter au clavier le plus petit ? Je pense que oui, ou bien l'ajout d'octave n'est plus utile...

La modification de code pour la numérotation des claviers est faite, comme cela même suite à plusieurs ajout suppression de clavier, chaque clavier est bien différent et unique que ceux existants déjà. Il me reste la copie d'un accord de la feuille sur elle même et la gestion des multipages !

J'ai ajouté un zoom automatique en fonction du nombre d'octave ajoutés/supprimés, maus ceci devient également caduc si cette option n'est plus utile...

@ bientôt

LouReeD

Rechercher des sujets similaires à "colorer celule adjacente meme couleur condition"