(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". Je vous laisse un peu toucher au programme pour mieux comprendre.

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.

Rechercher des sujets similaires à "vba condition feuille"