Difficulté à appliquer une macro

Bonjour tous,

Dans une feuille (liste de produits) j'applique la macro ci-dessous qui fonctionne à merveille sauf une chose: la deuxième partie de la macro s'applique à toute la feuille ce que je ne lui demande pas. (alors que la première partie s'applique bien à la plage sélectionnée )

Pour la présentation de la feuille (et surtout pour comprendre, vu que je suis particulièrement à l'Ouest avec excel en général et VB en particulier) que dois-je modifier pour que la partie 2 de la macro n'agisse que sur la plage sélectionnée ?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A2:L35")) Is Nothing Then

Cancel = True

Target.Interior.ColorIndex = 6

End If

With Selection.Font

.Underline = xlUnderlineStyleNone

.ColorIndex = 1

End With

End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A2:L35")) Is Nothing Then

Cancel = True

Target.Interior.ColorIndex = xlNone

End If

With Selection.Font

.Underline = xlUnderlineStyleNone

.ColorIndex = 16

End With

End Sub

Merci d'avance

Bonjour,

Essaye ceci :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Not Application.Intersect(Target, Range("A2:L35")) Is Nothing Then
 Cancel = True
 With Target
 .Interior.ColorIndex = 6
.Font.Underline = xlUnderlineStyleNone
 .Font.ColorIndex = 1
 End With
 End If
 End Sub

A te lire

Dan

merci Nad-Dan d'essayer de m'aider,

De toute façon cette partie du code fonctionne comme à l'origine, c'est la deuxième partie qui foire, autrement celle-ci:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A2:L35")) Is Nothing Then

Cancel = True

Target.Interior.ColorIndex = xlNone

End If

With Selection.Font

.Underline = xlUnderlineStyleNone

.ColorIndex = 16

End With

End Sub

Et si je met ton code à la place de la 1ère partie, ça ne sert à rien, aucun changement.

Rectification : seule la demande de coloration en jaune des cellules fonctionnent sur la plage sélectionnée, les autres critères : coloration de la police en noir, retour de la cellule à sa couleur d'origine et annulation de la coloration de police en noir s'applique sur toute la feuille !

comprend pas!

Pardon d'être nulle, je viens de trouver l'erreur de la ligne qui pose problème (je suis miro),

Nad-Dan ta proposition fonctionne parfaitement si je l'utilise pour les deux parties du code juste en changeant la ligne qui posait problème et en adaptant le reste pour correspondre à la deuxième partie , ce qui donne ceci sur la totalité du code:

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A5:L35")) Is Nothing Then

Cancel = True

With Target

.Interior.ColorIndex = 6

.Font.Underline = xlUnderlineStyleNone

.Font.ColorIndex = 1

End With

End If

End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Application.Intersect(Target, Range("A5:L35")) Is Nothing Then

Cancel = True

With Target

.Interior.ColorIndex = xlNone

.Font.Underline = xlUnderlineStyleNone

.Font.ColorIndex = 16

End With

End If

End Sub

Et ça roule nickel

Encore Merci !

Re,

Désolé je viens juste de revenir sur l'ordi.

Effectivement je n'avais changé que la première macro en me disant que tu adapterais pour la deuxième.

Mais tu aurais pu aussi faire une seule macro qui par simple click dans la cellule mettrait ou enlèverait la couleur de fond et de la police. Cela t'aurait évité de faire le click droite.

A bientôt

Dan

Tu as donc pensé que j'étais un peu moins nulle qu'en réalité, mais je débute complètement avec Excel (et la micro en général) j'ai quitté l'école il y a plus de quarante ans, avec un certificat d'études primaire; donc je n'y pige pas grand chose !:oops:

Mais ça m'intéresse de savoir ce que tu veux dire par une seule macro, déjà je pensais que les deux parties de ce code ne formaient qu'une seule macro.

Si je pouvais simplifier encore ....mais surtout comprendre ce que je fais !

Re,

40 ans !! ben je ne suis pas loin de toi...

Bon je t'explique. En fait tu as fait deux macros.

La première qui s'exécute sur un double clique dans la cellule et l'autre qui s'exécute sur un clique droite. Regarde, chaque macro commence par PRIVATE dans ce cas-ci.

Dans ton fichier ou un nouveau classeur, place la macro ci-dessous au même endroit (donc dans la feuille)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Not Application.Intersect(Target, Range("A5:L35")) Is Nothing Then 'modifie ton tableau
With Target
If .Interior.ColorIndex = xlnone And .Font.Underline = xlUnderlineStyleNone Then
 .Interior.ColorIndex = 6
 .Font.Underline = xlUnderlineStyleNone
 .Font.ColorIndex = 1
Else
.Interior.ColorIndex = xlNone
 .Font.Underline = xlUnderlineStyleNone
 .Font.ColorIndex = 16
End If
End With
End If
Application.ScreenUpdating = True
End Sub

Ensuite va sur ta feuille, clique dans une cellule puis dans une autre et reclique dans la première cellule. Vois le résultat

A te lire

Dan

Effectivement, mais c'est bizare, la feuille saute et tremble quand je clique sur une cellule, ce qu'elle ne fait pas avec l'autre code !!

Maintenant il faut que j'assimile ce que veux dire chaque ligne de code, et que je compare avec l'autre code, pour tenter d'y voir clair !

Mais je vais m'accrocher, il faut aussi que je trouve comment sélectionner toutes les cases en jaune pour les envoyer sur une autre feuille pour l'impression. J'ai beau lire et relire plusieurs tuto sur la confection des filtres , je n'y arrive pas !

Mais j'ai le temps !

Je finirai bien par y piger quelque chose !

Encore merci et à plus

PS, 40 ans c'est depuis ce temps que j'ai quitté l'école, pas mon âge, tu devines donc que j'en ai bien plus !

Re,

Effectivement, mais c'est bizare, la feuille saute et tremble quand je clique sur une cellule, ce qu'elle ne fait pas avec l'autre code !!

En fait cela le fait plus grâce à l'instruction "application.screenupdating" qui supprime le rafraichissement de l'écran pendant l'exécution de la macro.

Pour ce qui est des cases jaunes, il te faut simplememnt rechercher dans la plage les cellules en jaune. Un code du genre :

Dim c as range 'déclaration de la variable
For each c in range("A5:L35")
if c.Interior.ColorIndex = 6 then
c.copy ....
..
next c

Si pb n'héiste pas

A te lire

Dan

Bonjour Nad-Dan,

En fait cela le fait plus grâce à l'instruction "application.screenupdating" qui supprime le rafraichissement de l'écran pendant l'exécution de la macro.

Ben je ne sais pas si c'est vraiment utile cette instruction mais si je supprime les lignes afférentes c'est nettement plus agréable !

Par contre pour le code des cases jaunes , merci de me donner un chemin mais je n'ai rien compris ! car ça n'a rien à voir avec tout ce que j'ai lu ! (sur les filtres)

Et comme je ne pige pas encore le language VBA

dim =?

c=?

quelle doit être la mise en forme de la feuille de destination, avec tableau et titres idem la liste ?

et comment inclure son adresse dans le code

Mais ne te prends pas la tête pour moi !

Je finirai bien par trouver !

À+

ERREUR DE POST

(double)

Bonsoir,

Par contre pour le code des cases jaunes , merci de me donner un chemin mais je n'ai rien compris ! car ça n'a rien à voir avec tout ce que j'ai lu ! (sur les filtres)

Ce qu'il faut savoir, c'est la destination des cellules coloriées en jaune. Sur quelle feuille et à quel endroit. Là le mieux est de placer un petit fichier avec ce que tu veux exactement.

  • Dim : permet la déclaration de variable. Excel demande de la mémoire pour exécuter une macro. DIM permet de définir la quantité de mémoire à utiliser. D'où moins de mémoire tu utilises plus la macro s'exécutera rapidement.
  • C : équivaut ici à une cellule dans le tableau A5 à L35.

quelle doit être la mise en forme de la feuille de destination, avec tableau et titres idem la liste ?

C'est à toi de dire comment doit être ton tableau final. On réalise la macro en fonction de cela. Un bonne règle est d'éviter les cellules vides, que ce soit en colonne ou en lignes.

A te lire

Dan

Bonjour Nad-Dan,

Ce qu'il faut savoir, c'est la destination des cellules coloriées en jaune. Sur quelle feuille et à quel endroit. Là le mieux est de placer un petit fichier avec ce que tu veux exactement.

Moi je voyais bien dans le même classeur, une feuille nommée impression, ou toutes les cases jaunies dans la liste de la feuille nommée "liste" justement, seraient regroupées à la queue-leu-leu (liste qui est formée d'un tableau de 12 colonnes avec titres : types de produits et une trentaine de lignes avec les noms des produits en question mais toutes les colonnes ne sont pas pleines puisque certains produits changent, sont supprimés ou certains ajoutés)

l'idéal serait donc de n'avoir sur cette feuille "Impression" que les cases jaunies, les unes à la suite des autres sur une ou deux colonnes, mais je pense que ce serais plus difficile de demander ça à Excel qu'une reproduction vides des colonnes de la liste ou viendraient s'inscrire le contenu des cases jaunies ; je ne sais pas qu'elle est la meilleure formule (la plus simple à mettre en œuvre) j'avais pensé aussi, au cas ou c'est plus facile, ce que j'ignore mais il me semble avoir lu un truc là-dessus, c'est de trier les cellules ou la police est noircie plutôt que la case colorée, ce qui revient au même, mais paraît-il mieux gérable pour Excel, (toujours lu dans "création de filtre élaborés)

Mais je sèche encore grave pour la mise en œuvre car je ne sais pas rédiger les termes compréhensibles pour Excel ; certain termes me sont complètement inconnus, et d'autre tellement évidents que je ne les vois pas ; ils me paraissent trop simples, comme le terme "Trouve" requis dans une MFC que j'ai honte de ne pas avoir trouvé toute seule justement!

Tu vois, je suis encore loin de savoir me dépatouiller, mais je me soigne !

À+

Re,

Essaie de placer un fichier avec quelques données de base (police et cellules jaunes) et de créer une feuille pour l'impression avec ce que tu veux comme présentation finale.

On fera la macro en fonction de cela.

A te lire

Dan

Re

C'est très gentil à toi de vouloir me mâcher le travail,

Mais il faut que je comprenne pour refaire ensuite, donc il va falloir aussi me légender le code

pas à pas en language spécial nul , donc une bonne dose de Patience en perspective !

voici le lien:

https://www.excel-pratique.com/~files/doc/essai_macro.xls

Mais la forme de la feuille impression n'est pas obligée d'être comme ça, du moment qu'elle regroupe tout et ne prend pas trop de place en largeur, même les titres des familles de produits ne sont pas obligés de figurer vu que dans le vrais tableau, la mention chat ou chien ou boites etc.. figurera sur chaque ligne de produit

À+

ps au fait, je préfère tout de même la première forme de macro clik jaune (enfin les deux macros) parceque avec la dernière, ben de nouveau la réinitialisation de la cellule se fait sur toute la feuille et pas seulement sur la plage sélectionnée.

re,

Merci pour ton fichier.

Ce que l'on peut faire, c'est partir de la feuille LISTE en procédant comme suit :

  • on duplique la feuille LISTE
  • on renomme la feuille dupliquée (donc LISTE) et on lui attribue le nom IMPRESSION
  • on supprime tout ce qui n'est pas en jaune sauf les titres bien sûr

Qu'en penses-tu ?

ton PS --> "la réinitialisation de la cellule se fait sur toute la feuille" -> que veux-tu dire par là ?

Autre question : peux tu me confimer que ton tableau n'ira pas au delà de la ligne 35 et la colonne F comme dans ton exemple.

A te lire

Dan

Ben j'en pense que c'est malheureusement dans ce cas que ce sera trop large, ça ne tiendra pas sur une feuille, car il y a plus de colonnes que sur l'exemple (actuellement jusqu'à L)! ou alors il faut que je commence par changer la config de mon tableau liste, car sinon, c'est effectivement une solution qui me paraît simple (me paraît... mais est-ce aussi simple ?)

ton PS --> "la réinitialisation de la cellule se fait sur toute la feuille" -> que veux-tu dire par là ?

la même chose que sur mon post d'origine, mais ne fait pas attention, c'est moi qui ai mal manipulé le tableau, j'ai voulu faire ce que tu penses pour le code, c'est à dire copier le tableau sur la feuille impression et supprimer ce qui n'est pas jaune, mais sans virer la macro c'était impossible car la feuille devenait entièrement jaune et noire, puis se réinitialisait entièrement en gris.... évidement le manque d'habitude ne m'a pas fait penser tout de suite au simple "copier la feuille"

Je crois que je fatigue là....mais j'ai au moins appris une chose : que lorsqu'on clique dans le coin supérieur gauche afin de sélectionner l'ensemble de la feuille, le code présent s'applique sans distinction de sélection de plage !

Malheureusement non je ne peux dire si le nombre de colonne et de lignes resteront tels que

À plus, je vais réfléchir à la forme de ma liste !

Re,

Je m'en doutais que tu avais cliqué à cette endroit de la feuille.

Pour éviter ce dont tu parles, remplace dans la macro TARGET par ACTIVECELL

Je regarde pour la macro comme je t'en ai parlé. On verra par la suite

A plus

Dan

Bonjour Dan, c'est aussi le prénom d'un de mes fils,

Pour éviter ce dont tu parles, remplace dans la macro TARGET par ACTIVECELL

Je l'ai fait, mais ça ne change rien, la feuille entière s'active quand même, de plus pour entrer un nouveau produit ou corriger une cellule déja remplie, la macro en deux parties est mieux, car je peux intervenir sur une cellule par simple clic sans qu'elle s'exite et jaunisse puis pâlisse quand je valide en passant à la cellule d'a coté, c'est peut être plus lourd en matière de ressource, mais c'est plus stable et plus pratique, Je vais donc mettre la macro simplifiée en réserve dans mon classeur à macro et remettre l'autre que tu as si bien rendue parfaite.d'autant que sur celle-ci le fait de changer Target par Activecell fonctionne parfaitement (je suis tu t'en doutes bien incapable de piger pourquoi ça marche avec celle-là et pas l'autre, je ne vois pas l'argument logique)

Je planche en attendant sur une présentation différente de ma liste, mais si jamais tu va plus vite que moi et trouve une solution en l'état elle sera la bienvenue.

À +

Rechercher des sujets similaires à "difficulte appliquer macro"