Coloration formes par VBA

et oui !

je code condensé en ce moment !

Non à vrai dire j'ai répondu en 2 fois... Le lien générique pour les feuilles et ensuite la couleur...

Je ne suis pas rapide dans l'écriture des codes !

Pourtant je fais tout pour apprendre !

@ bientôt

LouReeD

Bonsoir,

Personnellement j'ai trouvé la réponse très rapide. Cela fonctionne dans la feuille d'essai mais pas dans mon projet. Le lien générique fonctionne très bien pour toutes les feuilles par contre pas la couleur. Juste pour info, certaines feuilles commencent par VT_xxxxx et d'autres par VE_xxxxx et si possible je ne voudrais pas changer ça . J'ai donc modifié le code dans le ThisWorkbook en remplaçant le terme "Page" par "V*" mais je pense que le "Module" est à adapter aussi mais je ne sais pas quoi. Par contre j'ai bien nommé chaque bouton "forme" du même nom que la feuille, c'est sans doute pour cela que le lien générique fonctionne ! Je joins un fichier pour que cela soit plus explicite

Merci à vous pour vos réponses

JBP

Bonjour,

il est normale que cela ne fonctionne pas !

Il faut comprendre les instruction avant de les utiliser ou de les modifier !

MID("Page 125", 1,4) dit de prendre la partie de la chaine alphanumérique "Texte" qui va du caractère 1 et ce sur 4 caractères, ce qui retourne Page.

Maintenant on aurait pu utiliser LEFT("Page 125",4) qui elle renvoie 4 caractères du texte à partir de la gauche ce qui donne aussi "Page".

Maintenant dans votre modification vous recherchez "V*" dans le nom de la feuille en partant du premier caractère et ce sur 4 caractères, et évidemment la fonction ne trouve pas car jamais il y a écrit "*" dans vos feuilles !

Donc pour tout simplifier on regarde seulement le premier caractère en partant par la gauche des noms de feuille :

If Left(Sh.Name,1) ="V" Then

et là ça fonctionne ! Le fichier :

et tout ceci en ajoutant un petit "fin" en fin de liste, la modification est minime.

Votre idée de regarder les cellules vides ne passe pas car elle sont vides, avec ou sans couleur... Sinon on peut regarder les paires de cellules et vérifier s'il y a du blanc des deux cotés, mais comment savoir s'il on est toujours dans la liste ?

Donc la technique du mot fin me parait être un bon compromis.

@ bientôt

LouReeD

Bonjour LouReeD,

" Il faut comprendre les instruction avant de les utiliser ou de les modifier ! " => C'est vrai mais je ne connais rien en VBA, j'essaye de trouver des réponses sur les forum mais je ne trouve pas toujours les réponses. En tous cas avec tes explications c'est beaucoup plus clair !

"Maintenant dans votre modification vous recherchez "V*" dans le nom de la feuille en partant du premier caractère et ce sur 4 caractères, et évidemment la fonction ne trouve pas car jamais il y a écrit "*" dans vos feuilles ! " => Je pensais qu'en mettant le caractère "*" on pourrait faire une requête sur tout ce qui suivait le V, enfin bref, je n'ai pas dû comprendre l'exemple de XCellus:oops:

J'ai essayé dans mon fichier et cela fonctionne à une seule condition, ne plus avoir de cellule sans remplissage comme je le souhaitais. Par contre j'ai quelques cellules sans remplissage que je souhaite conserver. Du coup, est-il possible d'adapter le code pour commencer la vérification de la coloration des cellules à partir de la ligne 9 de la feuille EXCEL ?

Merci encore !

JBP

remplacer le 1 par 9 dans la boucle...

En effet, vous venez de loin ! Attention ! Je ne me moque pas, jamais !

à une seule condition, ne plus avoir de cellule sans remplissage comme je le souhaitais

Je ne comprend pas ceci de mon coté...

@ bientôt

LouReeD

Ah d'accord, je vais essayer ça alors. Et oui, nous ne sommes pas tous doués en développement surtout quand on n'a jamais pratiqué!

Je voulais dire que le but était d'identifier les cellules sans remplissage de celles qui sont colorées. Enfin bref, je vais appliquer cette modif et voir le résultat.

Merci.

JBP

Bonsoir LouReeD,

Cela fonctionne bien sur mon projet, merci encore pour ton aide. Je mets le sujet en "résolu".

JBP

Merci @ vous pour vos remerciements.

Bon courage pour la suite

@ bientôt

LouReeD

Bonjour,

je vous répond ici JeanBaptisteP, car problème sur les MP...

Le code pour l'initialisation des feuilles :

Sub Int_Feuille()
    Dim Plage As Range, Cel_Trouv As Range, DerLig As Long, I
    With ActiveSheet
        ' on efface les deux première zone et leur colueur
        .Range("F3:I5,J3:M5").ClearContents
        .Range("F3:I5,J3:M5").Interior.Color = xlNone
        ' on attribue à la variable Plage la colonne A de la feuille que l'on essaie de quitter
        Set Plage = .Columns(1)
        ' on attribue la variable Cel_Trouv la cellule qui contient le mot "fin"
        Set Cel_Trouv = Plage.Cells.Find("fin", lookat:=xlWhole)
        ' si cette cellule est vide on quitte la procédure de test car "fin" n'a pas été trouvé
        If Not Cel_Trouv Is Nothing Then
            DerLig = Cel_Trouv.Row - 1
            ' on supprime la couleur des cellules en colonne 1 et 2
            For I = 9 To DerLig
                ' on supprime la couleur des cellules en colonne 1 et 2
                If Cells(I, 1).MergeArea.Cells.Count = 1 Then Range("A" & I).Resize(, 2).Interior.Color = xlNone
                ' on efface les données en colonne D, mais elles sont fusionnées, pour le différencier des autres
                ' on regarde le nombre de cellules comprise dans la sélection
                If Cells(I, 4).MergeArea.Cells.Count = 10 Then Range("D" & I).Resize(, 10).ClearContents
            Next I
        End If
    End With
End Sub

Le code prend en compte la feuille active, donc pour vos tests il faut aller sur une feuille "V" avant de lancer le code.

Si cela correspond à vos attentes, il faudra certainement gérer ce détail afin de pouvoir le lancer de la feuille Récap en ciblant la feuille voulue.

@ bientôt

LouReeD

Bonjour LouReeD,

Merci beaucoup ça fonctionne très bien ! Par contre j'aurais aimé n'avoir qu'un seul bouton présent sur la page "Sommaire" qui me permettra d'effacer toutes les feuilles qui commencent par "V".

J'aimerais bien adapter votre code mais je ne sais pas comment m'y prendre

Avez-vous une piste ?

Merci à vous !

J-Baptiste

Si c'est pour toutes les feuilles d'un coup alors c'est simple :

@ bientôt

LouReeD

Re LouReeD,

Ça fonctionne très bien, merci ! Du coup je vais utiliser les 2 boutons, celui qui permet de réinitialiser uniquement la feuille active et celui qui permet de réinitialiser tout le classeur !

A ce sujet, lorsque j'ai réinitialisé tout le classeur, les boutons sur le sommaire restent en vert et ne repassent pas en rouge alors que les feuilles du classeurs sont réinitialisées .

Je suis obligé de rentrer dans la feuille et de ressortir pour que son bouton sur la page "Sommaire" repasse au rouge.

J'imagine qu'on peut "automatiser" tout ça ? Je pensais qu'on pourrait ajouter l'appel de la fonction "Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)" dans la macro "Int_Feuille" qui permettrait d'actualiser automatiquement cette couleur de bouton ? C'est possible ?

Encore merci

J-Baptiste

Vu qu'on réinitialise tout il suffit de mettre les code qui passe les boutons au rouge à l'issue, pas la peine de lancer la procédure...

@ bientôt

LouReeD

D'accord, je vais faire ça !

J'en profite pour poser une autre question

J'aimerais bloquer le système d'ascenseur sur toutes les feuilles qui commencent par "V" et j'ai vu qu'il y avait la fonction ScrollArea qui pouvait être utilisée mais malheureusement il faut la redéfinir à l'ouverture du classeur. Je pensais le faire avec une macro dans le ThisWorkBook mais étant donnée que toutes mes feuilles n'ont pas le même nombre de lignes c'est galère. Je pensais utiliser également le mot "fin" pour définir le bas de chaque feuille. Seulement je ne sais pas comment adapter le code

voici un code que j'ai trouvé et que je pensais adapter:

Private Sub Workbook_Open()

Dim Feuille As Worksheet

For Each Feuille In ThisWorkbook.Sheets

Feuille .ScrollArea = "$A$1:$s$50"

Next Feuille

End Sub

Un grand merci LouReeD !

J-Baptiste

Bonsoir,

le code :

Private Sub Workbook_Open()
    Dim Plage As Range, Cel_Trouv As Range, Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        If Left(Sh.Name, 1) = "V" Then
            With Sh
                Set Plage = Sh.Columns(1)
                ' on attribue la variable Cel_Trouv la cellule qui contient le mot "fin"
                Set Cel_Trouv = Plage.Cells.Find("fin", lookat:=xlWhole)
                ' si cette cellule est vide on quitte la procédure de test car "fin" n'a pas été trouvé
                If Not Cel_Trouv Is Nothing Then
                    .Activate
                    .ScrollArea = "$A$1:$S$" & Cel_Trouv.Row - 1
                End If
            End With
        End If
    Next
End Sub

@ bientôt

LouReeD

Super LouReeD,

J'ai juste mis +1 au lieu de -1 car sinon on ne voyait pas le bas de la feuille ! (ScrollArea = "$A$1:$M$" & Cel_Trouv.Row + 1)

Par contre j'aimerais que ce code soit aussi valable pour la feuille "Sommaire" donc comment l'ajouter ? (cette feuille aussi contient le mot "fin"). En tous cas ça fonctionne super !

Merci pour vos solutions !

J-Baptiste

Enlevez le If Left.... Et son End If pique cela s'applique à toutes les feuilles.

@ bientôt

LouReeD

Merci LouReeD, c'est parfait !

J'ai trouvé sur le forum un sujet que j'aimerais appliquer dans mon projet. Ça serait pour masquer le ruban EXCEL et aussi afficher toutes les feuilles de mon classeur en plein écran.

Voilà ce que j'ai trouvé mais comment l'adapter à tout le classeur et non pas qu'à une seule feuille ?

Option Explicit

'----------------------------------------------------------------------------

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If Sh.Name = "Feuil2" Then

With Application

.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"

.DisplayFormulaBar = False

.ScreenUpdating = False

End With

With ActiveWindow

.DisplayGridlines = False

.DisplayHeadings = False

End With

End If

End Sub

'----------------------------------------------------------------------------

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

If Sh.Name = "Feuil2" Then

With Application

.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"

.DisplayFormulaBar = True

.ScreenUpdating = False

End With

End If

End Sub

Ça fonctionne très bien sur la feuille 2 en tous cas !

Merci à vous

J-Baptiste

Bonsoir,

ci joint un fichier avec ce qu'il faut pour tout faire...

Mais pensez à mettre une copie du bouton de mon fichier sur votre feuille récap (ou sur chaque feuille) comme cela chaque utilisateur sera à même de choisir son apparence... Enfin je crois.

Sinon si cela ne marche pas il y a toujours le système des boucles sur chaque feuille afin d'y mettre les bons paramètres le tout sous "Application.ScreenUpDating" afin que cela soit invisible à l'utilisateur.

Le fichier :

@ bientôt

LouReeD

Une question :

Sur vos feuilles "V" (ça ma rappelle une série ! ), pourquoi ne pas mettre vos boutons sur la zone des 3 premières colonnes plutôt que complètement à droite ?

@ bientôt

LouReeD

Rechercher des sujets similaires à "coloration formes vba"