Macro application couleur si modif cellule sur colonne precise
Résolu
SabLaf64
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
SabLaf64 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
SabLaf64 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille actuellement sur un tableau excel avec des macros (je suis novice mais je m'applique).
Ce classeur comprend 2 feuilles (1 pour l'équipe technique et 1 pour moi qui correspond à la partie gestion).
J'ai donc une première macro qui à partir de la feuille 1 nommée "Technique" va automatiquement venir coller dans la feuille 2 nommée "Facturation" les données qui m'intéressent pour ma facturation et ce dès qu'une ligne est saisie dans la feuille Technique.
Le feuille "Facturation" ne sera pas identique à la feuille Technique car je vais y insérer au fur et à mesure des lignes de prestations à facturer.
Mais j'ai besoin de savoir si une modif est appliquée par l'équipe Technique dans la feuille Technique parce que peut-être qu'elle se serait trompée sur le nom d'une personne, afin de savoir si cela va impacter ma feuille "Facturation".
Je me suis dit que je devais intégrer une macro événementielle dans ma feuille nommée Technique qui mettrait systématiquement en couleur la cellule modifiée pour que je puisse effectuer un contrôle.
Problématique :
- dès que j'intègre une nouvelle ligne la macro considère que c'est une modification de cellule et donc me la colorie
- sur une cellule pré-remplie, il se peut qu'une cellule soit vide car on a pas encore la donnée. Et donc on complétera par la suite. Il faut que cela soit aussi pris en compte comme la modification d'une cellule.
Donc je veux que ma macro ne s'applique que sur 5 colonnes précises et ne prennent pas en compte l'intégration de données sur une ligne vide mais ne tiennent compte que des lignes ou des données sont déjà existantes.
Voici ce que cela donne (test sur uniquement la colonne n°2):
Private Sub Worksheet_Change(ByVal target As Range)
'definition des colonnes
Set sel = Range("B3", selection.End(xlDown))
'debut d'action macro evenementiel
If Not Intersect(target, sel) Is Nothing Then
'Call ctrl
ActiveCell.Select
With selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
VOICI LA MACRO NOMMEE "CTRL"
Sub ctrl()
If Cells(ActiveCell.Row, 16).Value > 0 Then
ActiveCell.Select
With selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Pour essayer de faciliter le contrôle, j'ai ajouté une colonne qui compte le nombre de cellules contenant une donnée sur un ligne ce qui donne un repère.
J'espère que vous allez comprendre et si pas je peux vous donner mon tableau test.
Bonne soirée et un grand merci.
Sabrina
Je travaille actuellement sur un tableau excel avec des macros (je suis novice mais je m'applique).
Ce classeur comprend 2 feuilles (1 pour l'équipe technique et 1 pour moi qui correspond à la partie gestion).
J'ai donc une première macro qui à partir de la feuille 1 nommée "Technique" va automatiquement venir coller dans la feuille 2 nommée "Facturation" les données qui m'intéressent pour ma facturation et ce dès qu'une ligne est saisie dans la feuille Technique.
Le feuille "Facturation" ne sera pas identique à la feuille Technique car je vais y insérer au fur et à mesure des lignes de prestations à facturer.
Mais j'ai besoin de savoir si une modif est appliquée par l'équipe Technique dans la feuille Technique parce que peut-être qu'elle se serait trompée sur le nom d'une personne, afin de savoir si cela va impacter ma feuille "Facturation".
Je me suis dit que je devais intégrer une macro événementielle dans ma feuille nommée Technique qui mettrait systématiquement en couleur la cellule modifiée pour que je puisse effectuer un contrôle.
Problématique :
- dès que j'intègre une nouvelle ligne la macro considère que c'est une modification de cellule et donc me la colorie
- sur une cellule pré-remplie, il se peut qu'une cellule soit vide car on a pas encore la donnée. Et donc on complétera par la suite. Il faut que cela soit aussi pris en compte comme la modification d'une cellule.
Donc je veux que ma macro ne s'applique que sur 5 colonnes précises et ne prennent pas en compte l'intégration de données sur une ligne vide mais ne tiennent compte que des lignes ou des données sont déjà existantes.
Voici ce que cela donne (test sur uniquement la colonne n°2):
Private Sub Worksheet_Change(ByVal target As Range)
'definition des colonnes
Set sel = Range("B3", selection.End(xlDown))
'debut d'action macro evenementiel
If Not Intersect(target, sel) Is Nothing Then
'Call ctrl
ActiveCell.Select
With selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
VOICI LA MACRO NOMMEE "CTRL"
Sub ctrl()
If Cells(ActiveCell.Row, 16).Value > 0 Then
ActiveCell.Select
With selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End Sub
Pour essayer de faciliter le contrôle, j'ai ajouté une colonne qui compte le nombre de cellules contenant une donnée sur un ligne ce qui donne un repère.
J'espère que vous allez comprendre et si pas je peux vous donner mon tableau test.
Bonne soirée et un grand merci.
Sabrina
A voir également:
- Macro application couleur si modif cellule sur colonne precise
- Excel cellule couleur si condition texte - Guide
- Déplacer colonne excel - Guide
- Trier colonne excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel somme si couleur cellule - Guide
4 réponses
Bonjour
Peux tu envoyer un bout de ton fichier, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
tu fais "Coller".
Cdlmnt
Peux tu envoyer un bout de ton fichier, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
tu fais "Coller".
Cdlmnt
SabLaf64
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
A titre d'info si je travaille sur 2 feuilles c'est parce que l'équipe technique est terriblement nulle sur excel et qu'elle me casse constamment mes formules donc je cherche a ce qu'elle est le moins d'action possible dans ma partie.
Bonsoir ccm81,
Merci pour ton aide. Voici le lien : supprimé par la Modération à la demande de l'auteur
Alors j'ai sup les données persos (boulot) et modifié les onglets et c'est un peu le désordre dans mes macros car plusieurs tests mais je pense que tu vas vite comprendre.
Voici dans un 1er temps ce que je souhaite :
- l'équipe technique rempli la feuille intitulée "Technique". Certaines des cellules remplies sur une ligne vont se copier/coller automatiquement dans la feuille "Facturation" (ce sont les données qui vont m'être utiles)
- à partir de ces données moi je vais générer des lignes de lignes à facturer. Donc ma feuille "facturation" sera forcément différente de ma feuille "Technique"
Imaginons qu'une fille se trompe et veuille rectifier une info dans une des cellules dans la feuille Technique sur les colonnes 2; 3; 4; 5; 8; et 15, je voudrai que la cellule modifiée se colore (dans mes macros je teste pour le moment les modifs apportées à la colonne 2).
Le problème est que je ne veux que cela se passe uniquement sur les lignes ayant au minimum 1 cellule de remplie (même si cette même ligne contient des cellules vides dans les colonnes qui m'intéressent).
Dans le cas présent si je rempli une ligne à l'origine vide cela me la colore en vert.
Voilà je pense être suffisamment claire :)
Merci.
Sabrina
Merci pour ton aide. Voici le lien : supprimé par la Modération à la demande de l'auteur
Alors j'ai sup les données persos (boulot) et modifié les onglets et c'est un peu le désordre dans mes macros car plusieurs tests mais je pense que tu vas vite comprendre.
Voici dans un 1er temps ce que je souhaite :
- l'équipe technique rempli la feuille intitulée "Technique". Certaines des cellules remplies sur une ligne vont se copier/coller automatiquement dans la feuille "Facturation" (ce sont les données qui vont m'être utiles)
- à partir de ces données moi je vais générer des lignes de lignes à facturer. Donc ma feuille "facturation" sera forcément différente de ma feuille "Technique"
Imaginons qu'une fille se trompe et veuille rectifier une info dans une des cellules dans la feuille Technique sur les colonnes 2; 3; 4; 5; 8; et 15, je voudrai que la cellule modifiée se colore (dans mes macros je teste pour le moment les modifs apportées à la colonne 2).
Le problème est que je ne veux que cela se passe uniquement sur les lignes ayant au minimum 1 cellule de remplie (même si cette même ligne contient des cellules vides dans les colonnes qui m'intéressent).
Dans le cas présent si je rempli une ligne à l'origine vide cela me la colore en vert.
Voilà je pense être suffisamment claire :)
Merci.
Sabrina
Bonjour
Pour colorier (en vert) en cas de modification colonnes B,C,D,E,H,O et dans une ligne contenant au moins 3 données (modif comprise, et comme tu as quelque chose en colonne P)
Cdlmnt
Pour colorier (en vert) en cas de modification colonnes B,C,D,E,H,O et dans une ligne contenant au moins 3 données (modif comprise, et comme tu as quelque chose en colonne P)
Const co1 = "B:E"
Const co2 = "H"
Const co3 = "O"
Const vert = 43
Private Sub Worksheet_Change(ByVal target As Range)
Dim li As Long, nbcelremplies As Long
If target.Count > 1 Then Exit Sub
If Not Intersect(target, Union(Columns(co1), Columns(co2), Columns(co3))) Is Nothing Then
li = target.Row
nbcelremplies = Application.WorksheetFunction.CountA(Rows(li))
If nbcelremplies > 2 Then
target.Interior.ColorIndex = vert
End If
End If
Cdlmnt
Bonjour ccm81,
Merci pour ton retour et ta macro, cependant elle ne correspond pas totalement à mes attentes.
Tout d'abord un nouveau lien avec le tableau comportant des cellules pré-remplies : https://www.cjoint.com/c/FIbqUCNsQwo
En fait, j'ai besoin d'une macro qui permettrait :
- de colorier une cellule pleine dès l'instant qu'elle est modifiée (ex dans le tableau je modifie le nom LAFORGE en LAFORGUE car je me rends compte que j'ai fait une erreur)
- de colorier une cellule vide (parce qu'à ce moment là nous n'avions pas l'info) faisant partie d'une ligne en partie remplie
Par contre cette macro ne doit pas s'appliquer si l'on rempli une ligne vide (nouvelle ligne saisie).
Cette macro ne doit q'appliquer qu'aux cellules remplies et aux cellules vides d'une ligne possédant déjà des informations.
Un collègue me dit que c 'est impossible, qu'il faudrait créer une page "COPIE" qui serait la copie de ma page Technique et dans laquelle il faudrait que j'insère une "mise en forme conditionnelle" pour repérer les cellules qui diffèrent de la page Technique.
Qu'en penses-tu? Est-ce vraiment irréalisable?
Merci de ton retour.
SabLaf
Merci pour ton retour et ta macro, cependant elle ne correspond pas totalement à mes attentes.
Tout d'abord un nouveau lien avec le tableau comportant des cellules pré-remplies : https://www.cjoint.com/c/FIbqUCNsQwo
En fait, j'ai besoin d'une macro qui permettrait :
- de colorier une cellule pleine dès l'instant qu'elle est modifiée (ex dans le tableau je modifie le nom LAFORGE en LAFORGUE car je me rends compte que j'ai fait une erreur)
- de colorier une cellule vide (parce qu'à ce moment là nous n'avions pas l'info) faisant partie d'une ligne en partie remplie
Par contre cette macro ne doit pas s'appliquer si l'on rempli une ligne vide (nouvelle ligne saisie).
Cette macro ne doit q'appliquer qu'aux cellules remplies et aux cellules vides d'une ligne possédant déjà des informations.
Un collègue me dit que c 'est impossible, qu'il faudrait créer une page "COPIE" qui serait la copie de ma page Technique et dans laquelle il faudrait que j'insère une "mise en forme conditionnelle" pour repérer les cellules qui diffèrent de la page Technique.
Qu'en penses-tu? Est-ce vraiment irréalisable?
Merci de ton retour.
SabLaf
Essaies ceci
http://www.cjoint.com/c/FIbswBXHWLn
Cdlmnt
http://www.cjoint.com/c/FIbswBXHWLn
Cdlmnt
Bonsoir,
Alors j'ai fait plusieurs tests et apparemment cela fonctionne parfaitement comme je le souhaitais.
Je vais encore faire quelques tests demain :)
Sinon avec mon collègue on a décortiqué cette macro afin d'en comprendre le raisonnement et c'est vrai que nous n'avions pas du tout la même approche et vision du "comment faire pour atteindre tel résultat"
Merci pour tout.
Dès que j'aurais fait les derniers tests je passerai la conversation en "résolu".
Bonne soirée
:)
Alors j'ai fait plusieurs tests et apparemment cela fonctionne parfaitement comme je le souhaitais.
Je vais encore faire quelques tests demain :)
Sinon avec mon collègue on a décortiqué cette macro afin d'en comprendre le raisonnement et c'est vrai que nous n'avions pas du tout la même approche et vision du "comment faire pour atteindre tel résultat"
Merci pour tout.
Dès que j'aurais fait les derniers tests je passerai la conversation en "résolu".
Bonne soirée
:)