pascal7376
Messages postés28Date d'inscriptionlundi 4 juin 2007StatutMembreDernière intervention 6 juin 2007
-
4 juin 2007 à 15:24
pascal7376
Messages postés28Date d'inscriptionlundi 4 juin 2007StatutMembreDernière intervention 6 juin 2007
-
6 juin 2007 à 07:29
Bonjour
Je suis nouveau et je cherche à faire une macro dans excel mais je ne connais rien...
J'aimerais que la macro mette "--" dans K1 si A1 ="prt" et ainsi de suite pour toute la page... K2= "--" si B2="prt".
Et je ne peux pas utiliser de fomules car je fais des copier coller donc macro obilgatoire...
Et une autre macro me serait utile...
Si B1 est de couleur "4" , D1 doit avoir la même couleur et si B2 est orange, D2 doit être orange...
MErci
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 4 juin 2007 à 17:00
Re,
Bah alors c'est normal que tu crois que la macro de s'arrete pas.
En fait elle s'execute à chaque changement dans la feuille. hors ta macro effectue des changements dans la feuille qui rappelle la même macro, et ainsi de suite.
Donc il faut que tu spécifie peu être mieux le moment où tu souhaite qu'elle sexecute ou alors faire une truc du genre.
Private Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean
'Pour se protéger de la "récursivité"
If Not EnCours Then
EnCours = True
Else
Exit Sub
End If
Dim MColor As Integer
Application.ScreenUpdating = False 'Pour désactiver la mise à jour de l'affichage
For Each c In Worksheets(1).Range("b1:b500")
Select Case c.Value
Case "prt": MColor = 4
Range("K" & c.Row).Value = "--"
Case "unit": MColor = 6
Case "ms": MColor = 50
Case "os": MColor = 38
Case "ps": MColor = 8
Case "es": MColor = 45
Case "obj": MColor = 48
Case vbNullString: MColor = 0
End Select
c.Interior.ColorIndex = MColor
c.Font.ColorIndex = 0 If MColor 0 Then c.Font.Bold False If MColor 4 Or MColor 45 Then Range("D" & c.Row).Interior.ColorIndex = MColor
Next c
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 5 juin 2007 à 03:03
Je reviens à ta question initiale dans laquelle tu écris:
Et je ne peux pas utiliser de fomules car je fais des copier coller donc macro obilgatoire...
Je ne vois pas où est le problème de faire des copier-coller avec des formules si tu colles en Valeur (???)
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 juin 2007 à 08:09
Salut,
Pourquoi ne pas ajouter un bouton qur ta feuille excel?
Ca t'irais?
Et ensuite tu place tout le code qui était dans _Change dans l'événement ClicK.
En fait je me suis rendu compte que la macro d'hier ne s'executait qu'UNE seule fois avec mon booleen.
Donc ajoute un bouton dans la feuille et copie colle ce code.
Private Sub CommandButton1_Click()
Static EnCours As Boolean
'Pour se protéger de la "récursivité"
If Not EnCours Then
EnCours = True
Else
Exit Sub
End If
Dim MColor As Integer
Application.ScreenUpdating = False 'Pour désactiver la mise à jour de l'affichage
For Each c In Worksheets(1).Range("b1:b500")
Select Case c.Value
Case "prt": MColor = 4
Range("K" & c.Row).Value = "--"
Case "unit": MColor = 6
Case "ms": MColor = 50
Case "os": MColor = 38
Case "ps": MColor = 8
Case "es": MColor = 45
Case "obj": MColor = 48
Case vbNullString: MColor = 0
End Select
c.Interior.ColorIndex = MColor
c.Font.ColorIndex = 0 If MColor 0 Then c.Font.Bold False If MColor 4 Or MColor 45 Then Range("D" & c.Row).Interior.ColorIndex = MColor
Next c
Application.ScreenUpdating = True
'petite ligne a rajouter si on veut le faire
'plus d'une fois
EnCours = False
End Sub<hr />
, ----
[code.aspx?ID=41455 By Renfield]
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 juin 2007 à 08:30
Salut,
Et bien faut tout te mâcher à toi. Tu sais il faudrait essayer un peu par toi même de découvrir les fonctionnalités proposées par Excel. Jusqu'à présent on t'a tout de même bien faliciter le travail. Essaie de voir la suite tout seul.
Tu ajoutes un bouton dans UNE FEUILLE puis tu doubles click dessus ca va t'ouvrir l'éditeur VBA et ensuite copie colle.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 juin 2007 à 08:44
Salut,
Dernière chose.
Si tu estimes que ton problème de départ est résolu ("Tout marche à merveille"), alors penses à appuyer sur le bouton réponse acceptée sur le ou les post qui ont pu t'aider à avancer.
(ensuite si tu rencontres d'autres problèmes rien ne t'empêcheras de poser une nouvelle question dans un topic tout neuf.)
pascal7376
Messages postés28Date d'inscriptionlundi 4 juin 2007StatutMembreDernière intervention 6 juin 2007 5 juin 2007 à 08:45
Je viens de la soumettre à une séance de torture.... elle fonctionne à merveille.... juste un petit bug....
si sur une ligne je mets "prt", elle va mettre la couleur correspondante....
si la ligne en dessous j'écris "salut", elle prendra la couleur de la ligne précédente....
mais si je mets un code "prt" "ms" "os" ... comme dans la macro, pas de soucis mais une faute de frappe, reprend la couleur de la ligne avant....
bizarre, non? en tout cas pour moi....lol
pascal7376
Messages postés28Date d'inscriptionlundi 4 juin 2007StatutMembreDernière intervention 6 juin 2007 5 juin 2007 à 11:46
Encore moi.... Je pensais pouvoir résoudre un petit prob seul mais je crois que je ne connais pas encore assez de chose...
Si je veux dans la colonne G que le texte "p" soit remplacé par "divers"¨
Que dois-je rajouter à la macro???
Voici ce que j'ai essayé sans succès:
Private Sub COULEUR_Click()
Static EnCours As Boolean
'Pour se protéger de la "récursivité"
If Not EnCours Then
EnCours = True
Else
Exit Sub
End If
Dim MColor As Integer
Application.ScreenUpdating = False 'Pour désactiver la mise à jour de l'affichage
For Each c In Worksheets(1).Range("b1:b500")
Select Case c.Value
Case "prt": MColor = 4
Range("K" & c.Row).Value = "Alphacos"
Case "unit": MColor = 6
Case "ms": MColor = 50
Case "os": MColor = 38
Case "ps": MColor = 8
Case "es": MColor = 45
Case "obj": MColor = 48
Case Else: MColor = 0
End Select
c.Interior.ColorIndex = MColor
c.Font.ColorIndex = 0 If MColor 0 Then c.Font.Bold False If MColor 4 Or MColor 6 Or MColor = 50 Or MColor = 38 Or MColor = 8 Or MColor = 45 Or MColor = 48 Or MColor = 0 Then Range("D" & c.Row).Interior.ColorIndex = MColor
Next c
For Each c In Worksheets(1).Range("G1:G500")
Select Case c.Value
Case "p": Value = "Divers"
End Select
Next c
Application.ScreenUpdating = True
'petite ligne a rajouter si on veut le faire
'plus d'une fois
EnCours = False
pascal7376
Messages postés28Date d'inscriptionlundi 4 juin 2007StatutMembreDernière intervention 6 juin 2007 5 juin 2007 à 13:21
Génial ca marche... décidement quand on connait on peut faire ce qu'on veut.... je vous envie un peu....
avec la macro peux-tu lui dire de mettre une couleur au texte que la macro va écrire?
Genre que le texte Alphacos soit rouge...?
Et est-ce possible de "verrouiller" certaine cellule? c-a-d que meme si il y a "prt" en B72 (ex), de ne pas forcément mettre alphacos en K72, car K72 est "verrouiller"...
Ou alors est-ce que la ca devient trop difficile...
Private Sub COULEUR_Click()
Static EnCours As Boolean
'Pour se protéger de la "récursivité"
If Not EnCours Then
EnCours = True
Else
Exit Sub
End If
Dim MColor As Integer
Application.ScreenUpdating = False 'Pour désactiver la mise à jour de l'affichage
For Each c In Worksheets(1).Range("b1:b500")
Select Case c.Value
Case "prt": MColor = 4
Range("K" & c.Row).Value = " Alphacos "
Case "unit": MColor = 6
Range("K" & c.Row).Value = " Alphacos "
Case "ms": MColor = 50
Case "os": MColor = 38
Case "ps": MColor = 8
Case "es": MColor = 45
Case "obj": MColor = 48
Case Else: MColor = 0
End Select
c.Interior.ColorIndex = MColor
c.Font.ColorIndex = 0 If MColor 0 Then c.Font.Bold False If MColor 4 Or MColor 6 Or MColor = 50 Or MColor = 38 Or MColor = 8 Or MColor = 45 Or MColor = 48 Or MColor = 0 Then Range("D" & c.Row).Interior.ColorIndex = MColor
Next c
For Each c In Worksheets(1).Range("G1:G500") If c.Value "Material <not specified>" Then c.Value "Divers"
Next c
Application.ScreenUpdating = True
'petite ligne a rajouter si on veut le faire
'plus d'une fois
EnCours = False
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 juin 2007 à 13:49
Re,
Essaies Voir de le Faire tout seul.En anglais police FONT donc a ton avis la ligne c.Font.ColorIndex 0 qu'est ce qu'elle fait pourquoi la tu mise....
Il faut être logique un peu. Tu recommence à essayer de faire en sorte que l'on te mâche tout. et ca devient lassant. Ce n'est pas le fait de le savoir, mais si tu ne cherches pas un minimum comment tu veux t'améliorer. Regarde l'outil que te propose EXCEL et qui s'appelle enregistreur de Macro.
la couleur de la police est c.Font.Color <gras>VbRed ou alors c.Font.ColorIndex 4</gras>
De meme pour le Verouillage (qui soit dit en passant n'aura de l'effet que si la feuille est protégée) se dit Lock en anglais.
Donc en regardant un minimum
if c.locked = True then msgbox "cellule protégée"