Macro qui se lance seule des la modification d'une colonne

Salut Tout le monde,

Bon j'ai un petit soucis avec ma macro, peut être que qqn sera m'aider

Alors j'ai une feuille qui s'appelle "Produccion" et une autre qui s'apelle "Silos"

La feuille Prod contient un tableau dont notamment la colonne K est remplie au moyen d'une liste déroulante qui permet de sélectionner des valeurs comme "1S; 2S etc." Le nombre de ligne du tableau remplie peut varié mais il peut aller jusqu'a K200.

Sur la feuille silos j'ai des dessins de silos qui ont des noms "1S, 2S etc." et chaque silo à une case à cocher attribuer qui lorsquelle est coché indique que le silo est plein et donc marque vrai dans la cellule liée.

J'aimerai qu'a chaque fois que l'on entre le nom d'un silo dans la colonne K (Feuille Produccion) par exemple 1S, la cellule liée de ce silo prennent la valeur VRAI dans le cas du silos 1S c'est la cellule C11 de la feuille silos.

Je vous mets les codes que j'ai testé mais rien n'a marché :

Le code que j'ai mis sur la feuille Produccion est :

Private Sub Worksheet_Change(ByVal cellule As Range)

If cellule.Address = Range("K1:K200").Address Then

Ecrire

End If

End Sub

Le code que j'ai écrit dans un module est :

Sub Ecrire()

Dim L As Integer

L = 1

Sheets("Produccion").Select

For L = 1 To Range("K200").End(xlUp).Row

If Range("K" & L) = "1S" Then

Sheets("Silos").Select

Range("C11").Select

ActiveCell.FormulaR1C1 = "TRUE"

End If

Next L

End Sub

Si qqn aurait une idée ça serait super.

Merci d'avance

Bonjour,

Une piste en attendant d'en savoir plus. A mettre dans le module de la feuille et à adapter pour les autres cas :

Private Sub Worksheet_Change(ByVal cellule As Range)

    Dim Cel As Range

    If cellule.Column <> 11 Then Exit Sub
    If cellule.Count > 1 Then Exit Sub

    Set Cel = Columns(11).Find("1S", , xlValues, xlWhole)

    Application.EnableEvents = False
    Sheets("Silos").Range("C11").Value = Cel Is Nothing
    Application.EnableEvents = True

End Sub

si dans n'importe quelle cellule de la colonne K il y a au moins un " 1S", la case à cocher sera cochée et donc, si dans la colonne K tu supprimes tous les 1S, elle sera décochée !

Salut Theze,

Merci pour ta réponse, alors ton code est exactement ce que je recherchais par contre il y a un petit soucis, je te l'ai mis en exemple parce que c'est un peu compliqué à expliquer :

En fait quand je sélectionne 1S dans ma liste déroulante il ne me sélectionne pas le silo directement il faut queaucoup je sélectionne un autre silo pour qu'il me le comptabilise. Je te laisse regarder pour que tu vois de quoi je parle.

En tout cas merci be

Re,

Désolé, c'est moi qui me suis trompé, il faut utiliser l'inverse donc le code devient :

Private Sub Worksheet_Change(ByVal cellule As Range)

    Dim Cel As Range

    If cellule.Column <> 11 Then Exit Sub
    If cellule.Count > 1 Then Exit Sub

    Set Cel = Columns(11).Find("1S", , xlValues, xlWhole)

    Application.EnableEvents = False
    Sheets("Silos").Range("C11").Value = Not Cel Is Nothing
    Application.EnableEvents = True

End Sub

Merci beaucoup c'est absolument parfait ! Je vous remercie infiniment!

Bonne après-midi à vous

Je viens de me rendre compte que du coup quand on désélectionne les silos sur le tableau ça ne les décoche pas, je n'y avait pas penser mais est-ce que vous auriez une idée du code supplémentaire qui pourrait faire ça?

Merci

Que veux-tu dire, que si tu supprimes 1S de la colonne K la case reste cochée dans la feuille "Silos" ? Ou si tu décoches dans la feuille "Silos" tu veux que toutes les valeurs 1S soient supprimées de la colonne K ?

J'ai testé ça ducoup mais ça ne me décoche pas la case

'Ce code ne fonctionne pas!!
Private Sub Worksheet_Change(ByVal cellule As Range)

    Dim Cel As Range

    If cellule.Column <> 11 Then Exit Sub
    If cellule.Count > 1 Then Exit Sub

    Set Cel = Columns(11).Find("1S", , xlValues, xlWhole)
    'traitement de l'erreur possible : Si on ne trouve rien :
    If Cel Is Nothing Then

    Application.EnableEvents = False
    Sheets("Silos").Range("C11").Value = Cel Is Nothing
    Application.EnableEvents = True

    Else

    Application.EnableEvents = False
    Sheets("Silos").Range("C11").Value = Not Cel Is Nothing
    Application.EnableEvents = True
   End If
   End Sub

Alors un peu des deux :

Je voudrais que quand j'enlève 1S disparait de la colonne K cela décoche le silo, et que losque je décoche le silo cela efface 1S de la colonne K.

Afin qu'il n'y ai pas d'incohérence dans la gestion des silos

Est-ce que j'ai été assez clair ?

Merci

Alors là, ça devient un petit peu plus complexe.

Tu rajoutes un module standard à ton classeur et tu colles le code ci-dessous dans ce module :

Sub CaseACocher()

    Dim C As Shape
    Dim Cel As Range

    Set C = Worksheets("Silos").Shapes(Application.Caller)

    If C.ControlFormat.Value <> 1 Then

        Set Cel = Worksheets("Produccion").Columns(11).Find("1S", , xlValues, xlWhole)
        If Not Cel Is Nothing Then Cel.Value = ""

    End If

End Sub

ensuite, tu fais un clic droit sur ta case à cocher concernant le silo 1S dans ta feuille "Silos" puis, tu cliques sur "Affecter une macro..." et là, tu choisis "CaseACocher", tu valides et tu testes, tu entres 1S dans ta colonne K puis tu viens dans la feuille "Silos" et tu décoches la case tu verras le résultat en feuille "Produccion" !

Laisses ma première macro exactement comme je te l'ai donné, n'utilises pas le code que tu as modifié.

Merci beaucoup ça marche parfaitement, du coup pour les autres silos il me suffira de faire une macro pour chaque case à cocher et se sera parfait.

En tous les cas je n'aurai jamais pu le trouver toute seule, merci beaucoup pour ton aide!!

Je te souhaite une bonne fin d'après midi

Au plaisir

content de t'avoir aidé

Rechercher des sujets similaires à "macro qui lance seule modification colonne"