(VBA) Condition d'une feuille à l'autre
Bonjour!
J'étais déjà venu sur le forum pour un problème et on m'avait bien aidé, je suis en stage et je dois réaliser un fichier qui permettra aux opérateurs de productions de demander leurs mesures, et aux opérateurs de mesure d'afficher les résultats.
J'ai fini la partie affichage de mesure, je suis entrain de m'occuper des demandes (Je vous met mon fichier en pièce jointe) mais mon problème est le suivant:
J'aimerais que quand, sur ma première feuille (Résultats), la case de mesure est remplie (ex: RAS ou Alésage... etc), en fonction de la machine pour laquelle la pièce est finie (240, Famir...etc), les pièces en attentes sur la deuxième feuille (Demandes) passent en "pièces terminées".
Merci de votre temps!
Bonjour,
En effet c'est moi qui t'aies aidé la dernière fois
Et je reviens tout d'abord avec des améliorations de programme, visiblement tu as écris plusieurs fois les mêmes lignes de code, et il faut toujours se demander si tu ne peux pas faire autrement dans ces cas là.
Premièrement, le programme Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range) 'Quand la feuille (Worksheet) change, ce programme se lance
Application.EnableEvents = False
Dim cell As Range
'mise en formet intérieur et texte
If Target = "RAS" Then
Target.Font.ColorIndex = 51
Target.Interior.Color = RGB(50, 200, 100)
ElseIf Target = "1HT" Or Target = "2HT" Or Target = "3HT" Or Target = "Alésage" Or Target = "Chemin" _
Or Target = "Collet" Or Target = "EXT" Or Target = "INT" Or Target = "Epaulement" Or Target = "Portée de joint" _
Or Target = "H" Or Target = "H1" Or Target = "Face: Petite" Or Target = "Face: Grande" Then
Target.Font.ColorIndex = 30
Target.Interior.Color = RGB(250, 150, 150)
End If
For Each cell In Range("J7:O30").Cells
If cell = "" Then
cell.Interior.ColorIndex = xlColorIndexNone
End If
Next cell
'valeur de l'heure
Cells(9, Target.Column) = Format(Time, "h\Hmm")
Application.EnableEvents = True
End Sub
Tu faisais la même mise en forme conditionnelle pour plein de valeurs, j'ai utilisé l'opérateur Or pour faire ça, et j'ai remplacé activecell par Target, pour le changement de l'heure, j'ai juste utilisé la propriété Target.column, j'ai donc supprimé tous les programmes qui ne servaient plus.
Deuxièmement, le programme d'effacement de colonnes, je n'ai pas bien compris pourquoi tu supprimais les données jusqu'à la ligne 30 dans ta feuille... j'ai quand même gardé ça, par contre j'ai changé tous tes programmes en un seul, tu peux savoir quel bouton appelle un programme via Application.Caller, qui renvoie le nom du contrôle, ensuite tu vas dans Feuil1.Shapes pour avoir le contrôle, et j'ai utilisé la propriété TopLeftCell.column pour avoir la colonne de la cellule se trouvant en haut à gauche du contrôle.
Le programme donne:
Sub EffacerColonne()
Dim bouton As Shape
Set bouton = Feuil1.Shapes(Application.Caller)
colonne = bouton.TopLeftCell.Column
If MsgBox("Voulez vous vraiment effacer la colonne " & Cells(6, colonne) & "? ", vbOKCancel, "Confirmation") = vbOK Then
Range(Cells(7, colonne), Cells(30, colonne)) = ""
End If
End Sub
Il faudra juste affecter cette macro à chacun de tes boutons pour que ça fonctionne, je te laisserai tester bien sûr, fais déjà ces modifications et reviens vers moi pour la suite :)
EDIT:
Tu devrais avoir ce résultat:
ReBonjour! Un plaisir de te revoir et merci pour tout ce que tu as fais!
Entre mon post et ta réponse mon programme avait un peu changé, j'ai modifié avec ce que tu m'a donné, je sais pas comment je me suis débrouillé mais j'ai pas mal de problème.
J'ai un problème de compatibilité pour les Target, et je crois qu'il y a quelques coquilles en plus
Effectivement ça servait à rien d'aller jusqu’à O30, c’était les reste de la version première du programme, j'ai modifié.
Je te suis le nouveau document
EDIT: La copie que tu m'a envoyé a aussi des problèmes de compatibilité chez moi
J'ai essayer de mettre petit à petit ce que tu m'a envoyé et pas de problème avec les Target, je commence à avoir des problèmes quand les cellules vides doivent redevenir blanches
Re,
Je n'aime pas trop avoir à recoder le programme de transfert des données que j'avais déjà fait, je te transmets une nouvelle version du code à tester:
Private Sub Worksheet_Change(ByVal Target As Range) 'Quand la feuille (Worksheet) change, ce programme se lance
Application.EnableEvents = False
Dim cell As Range
Dim ligDep, ligFin, ligExport
'mise en formet intérieur et texte
If Target = "RAS" Then
Target.Font.ColorIndex = 51
Target.Interior.Color = RGB(50, 200, 100)
ElseIf Target = "1HT" Or Target = "2HT" Or Target = "3HT" Or Target = "Alésage" Or Target = "Chemin" _
Or Target = "Collet" Or Target = "EXT" Or Target = "INT" Or Target = "Epaulement" Or Target = "Portée de joint" _
Or Target = "H" Or Target = "H1" Or Target = "Face: Petite" Or Target = "Face: Grande" Then
Target.Font.ColorIndex = 30
Target.Interior.Color = RGB(250, 150, 150)
End If
For Each cell In Range("J7:O30").Cells
If cell = "" Then
cell.Interior.ColorIndex = xlColorIndexNone
End If
Next cell
'valeur de l'heure
Cells(9, Target.Column) = Format(Time, "h\Hmm")
With Feuil3
Machine = Cells(6, Target.Column)
ligDep = 4
ligFin = .Range("b" & Rows.Count).End(xlUp).Row
ligExport = 4
For i = ligFin To ligDep Step -1
If .Range("c" & i) = Machine Then
.Cells(ligExport, 1).EntireRow.Insert shift:=xlShiftDown
.Cells(ligExport, "g") = .Cells(i, "b")
.Cells(ligExport, "h") = Format(Time, "h:mm;@")
.Cells(ligExport, "i") = Format(.Range("h" & ligExport) - .Cells(ligExport, "d"), "h:mm;@")
.Cells(ligExport, "j") = IIf(.Cells(i, ligExport) - .Range("e" & i) < 0, "avance", "retard")
.Cells(ligExport, "k") = Format(Abs(.Cells(i, ligExport) - .Range("e" & i)), "h:mm;@")
.Range("b" & i, "e" & i).Delete shift:=xlShiftUp
End If
Next i
End With
End Sub
Oui désole pour ce que tu avais fait la dernière fois, on m'a donné un cahier des charges inattendu le lendemain;
J'avais prévu de faire 2 Classeurs, un pour les demandes et un pour l'affichage mais il faut les deux fonctions sur le même classeur alors j'ai recommencé avec un ami et il m'a pas mal aidé, mais on a pas réussi à reprendre ce que tu avais fais, il m'a donné une fonction ( FindLine).
En tous cas merci pour ton aide, vraiment! Je vais regarder tout ça cet aprèm et je te tiens au courant.