Macro excel

Résolu
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007 - 4 juin 2007 à 15:24
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Derniè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

49 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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
   
   Application.ScreenUpdating = True
 

End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
4 juin 2007 à 17:07
Ok mais avec la dernière version, elle ne se lance plus... que faut-il faire pour qu'elle se lance
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
4 juin 2007 à 17:07
Ok mais avec la dernière version, elle ne se lance plus... que faut-il faire pour qu'elle se lance
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
4 juin 2007 à 17:08
pardon ca marche
Quel bonheur
Un grand merci
Ca ferait du bien d'avoir votre savoir.... et encore merci pour la réponse aussi rapide...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
4 juin 2007 à 17:10
Je me suis réjouis trop vite... en faite, je ne sais pas quand est-ce qu'elle se lance???
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
4 juin 2007 à 17:18
est-ce possible de mettre un icone pour la lancé?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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 (???)

MPi
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 07:26
Oui vous avezu certainement raison... je vais essayer.
Comment dois-je faire pour lancer la macro???? Avec un icône??
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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]

@+: Ju£i?n
Pensez: Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 08:26
Ok l'idée me plait
Donc j'ajoute un bouton dans une barre d'outils mais ensuite comment dois-je faire pour lui mettre le code???
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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.

@+: Ju£i?n
Pensez:
Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 08:36
Tout marche à merveille... vous avez rendu quelqu'un heureux un grand merci et je vais essayer de comprendre comment ca marche....
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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.)

@+: Ju£i?n
Pensez: Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Derniè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
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 6 juin 2007
5 juin 2007 à 10:31
Que dire à part parfait et un grand merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 juin 2007 à 10:35
Salut,
Alors pense a ce que je t'ai dit et appuie sur le bouton réponse acceptée sur le ou LES posts qui ont pu t'aider.
MERCI

@+: Ju£i?n
Pensez: Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Derniè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


End Sub
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 juin 2007 à 11:53
'Si tu veux juste remplacer dans le cas ou il a "p"

'fais ceci

For Each c In Worksheets(1).Range("G1:G500")   If c.Value "p" Then c.Value "Divers"
Next c
,

----

Ju£i?n</italique>


Pensez: Réponse acceptée
0
pascal7376 Messages postés 28 Date d'inscription lundi 4 juin 2007 Statut Membre Derniè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


End Sub
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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"

@+: Ju£i?n
Pensez: Réponse acceptée
0
Rejoignez-nous