Exécuter une macro automatiquement

Bonjour,

J'ai créer une macro qui tri une certaine colonne lorsque que je lui demande. Mais mon réel besoin est que dès que je change quelques choses dans cette dite colonne j'aimerais que la macro s’exécute.

Est-ce quelqu'un peut m'aider svp

Bonjour,

Il faut placer ta macro (son contenu) en évènementielle se lançant au changement de valeurs dans ta colonne.

L'évènement concernera la totalité de la feuille, il faudra donc compléter ta macro pour cadrer la zone de changements pour laquelle le code doit être exécuté.

Cordialement.

Bonjour, josmet , MFerrand

Pour confirmer les propos de MFerrand, voici un code qui fonctionne, a coller dans le code de la feuille ( clic droit sur onglet de feuille et visualiser le code)

'à placer dans le code de la feuille
 Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LigneDer As Long
Dim Colonne As Integer

  Colonne = Target.Column
  LigneDer = Cells(Rows.Count, Colonne).End(xlUp).Row
  Range(Cells(2, Colonne), Cells(LigneDer, Colonne)).Sort _
              key1:=Cells(2, Colonne), order1:=xlAscending, dataoption1:=xlSortNormal, Header:=xlNo

End Sub

2ème version

'Tri automatique si changement colonne A            
    Option Explicit        
    Private Sub Worksheet_Change(ByVal Target As Range)        
        If Target.Count = 1 Then MsgBox "Vous avez modifier la feuille !"        
         Application.Run "'liste clients.xlsm'!Tri_4"    
'Macro appelée    
    End Sub        

Amicalement

Pierrot

Bonjour,

Ça fonctionne presque. Le problème avec la version 1 est que le tri se fait à partir de la première pour mon fichier, il faut que ce soit dans la plage A8 à A200

Merci infiniment pour votre aide

Si tu ne mets pas de fichier, c'est que tu es en capacité d'assurer toi-même l'adaptation...

Si tu n'es pas en mesure de le faire et souhaite une assistance pour adapter telle ou telle solution, tu mets un fichier

Malheureusement je ne peut pas mettre de fichier.

Merci quand même

Je résume

1) Tu disposes d'une macro ! Que tu veux rendre automatique aux changements affectant une partie d'une feuille.

Macro que tu n'as pas écris toi-même, cela va sans dire, car dans le cas contraire il serait difficilement compréhensible que tu ne puisses la modifier pour l'adapter...

Macro que tu ne fournis pas : premier choix...

2) A partir des indications qui te sont données tu ne peux toujours pas adapter...

Et tu décrètes que tu ne peux fournir de fichier : deuxième choix...

[NB- On peut toujours fournir un fichier pour illustrer un problème et recueillir une solution : il suffit de le fabriquer en veillant que sa structure et les types de données soient conformes à l'original...]

Ce n'est pas ce que j'appellerais rechercher une aide !

Effectivement alors voici une partie de mon fichier ou il y a la macro tridate et c'est celle-la que j'aimerais qui s’exécute automatiquement.

Merci

Tu n'avais pas indiqué que tu avais déjà une évènementielle Change... La nouvelle action automatique doit y être intégrée.

Pour commencer, j'ai repris ta macro enregistrée pour l'écrire en code VBA non enregistré !

Sub Tridate()
    With Worksheets("Accueil")
        If .AutoFilterMode Then
            If .FilterMode Then .ShowAllData
        End If
        .Range("A8:P200").Sort key1:=.Range("A8"), order1:=xlAscending, Header:=xlNo
    End With
End Sub

Ce qui la raccourcit un peu puisque le tri tient en une ligne et le reste est un défiltrage au cas où (qui n'était pas opéré dans la macro initiale.

Sur ton évènementielle actuelle, je l'ai d'une part légèrement simplifiée (mais tu peux garder ta version initiale) et d'autre part adaptée pour qu'elle traite les deux types de changement...

Je l'ai aussi réindentée pour qu'elle soit plus lisible (décidément l'indentation classique à du mal à s'imposer ! )

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim TimeStr As String
    If Not Application.Intersect(Target, Range("I8:J200")) Is Nothing Then
        On Error GoTo EndMacro
        If Target.Cells.Count > 9 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        Application.EnableEvents = False
        With Target
            If .HasFormula = False Then
                Select Case Len(.Value)
                    Case 1 To 4
                        TimeStr = .Value \ 100 & ":" & .Value Mod 100
                    Case 5, 6
                        TimeStr = .Value \ 10000 & ":" & (.Value Mod 10000) \ 100 & ":" _
                         & .Value Mod 100
                    Case Else
                        Err.Raise 0
                End Select
                .Value = TimeValue(TimeStr)
            End If
        End With
    ElseIf Not Intersect(Target, Range("A8:A200")) Is Nothing Then
        Application.EnableEvents = False
        If Me.AutoFilterMode Then
            If Me.AutoFilter Then Me.ShowAllData
        End If
        Range("A8:P200").Sort key1:=Range("A8"), order1:=xlAscending, Header:=xlNo
    End If
    Application.EnableEvents = True
    Exit Sub
EndMacro:
    MsgBox "You did not enter a valid time"
    Application.EnableEvents = True
End Sub

Inutile de te renvoyer le classeur puisque le test n'y est pas possible et que dans tous les cas tu devras la transférer pour tester.

Cordialement.

Merci beaucoup

Re-bonjour,

Malheureusement il y a un bug à la ligne

If Me.AutoFilter Then

Pouvez-vous encore aider une débutante.

Merci

Bonjour,

Me revoilà,

Il y a un bug dans la formule

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim TimeStr As String

If Not Application.Intersect(Target, Range("I8:J200")) Is Nothing Then

On Error GoTo EndMacro

If Target.Cells.Count > 9 Then Exit Sub

If Target.Value = "" Then Exit Sub

Application.EnableEvents = False

With Target

If .HasFormula = False Then

Select Case Len(.Value)

Case 1 To 4

TimeStr = .Value \ 100 & ":" & .Value Mod 100

Case 5, 6

TimeStr = .Value \ 10000 & ":" & (.Value Mod 10000) \ 100 & ":" _

& .Value Mod 100

Case Else

Err.Raise 0

End Select

.Value = TimeValue(TimeStr)

End If

End With

ElseIf Not Intersect(Target, Range("A8:A200")) Is Nothing Then

Application.EnableEvents = False

If Me.AutoFilterMode Then

If Me.AutoFilter Then Me.ShowAllData

End If

Range("A8:P200").Sort key1:=Range("A8"), order1:=xlAscending, Header:=xlNo

End If

Application.EnableEvents = True

Exit Sub

EndMacro:

MsgBox "You did not enter a valid time"

Application.EnableEvents = True

End Sub

Pouvez-vous encore une fois aider une pauvre débutante

Merci

Bonjour,

If Me.FilterMode Then Me.ShowAllData

J'ai vu que ma plume avait fourché vraiment désolé !

Dans le bout de code qui précédait il y avait bien le bon test pourtant...

Bonne continuation.

Merci mille fois ça fonctionne super bien

Merci merci et merci

Hé oui me revoilà !

Voici mon (votre) code

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim TimeStr As String

If Not Application.Intersect(Target, Range("I8:J200")) Is Nothing Then

On Error GoTo EndMacro

If Target.Cells.Count > 9 Then Exit Sub

If Target.Value = "" Then Exit Sub

Application.EnableEvents = False

With Target

If .HasFormula = False Then

Select Case Len(.Value)

Case 1 To 4

TimeStr = .Value \ 100 & ":" & .Value Mod 100

Case 5, 6

TimeStr = .Value \ 10000 & ":" & (.Value Mod 10000) \ 100 & ":" _

& .Value Mod 100

Case Else

Err.Raise 0

End Select

.Value = TimeValue(TimeStr)

End If

End With

ElseIf Not Intersect(Target, Range("A8:A200")) Is Nothing Then

Application.EnableEvents = False

If AutoFilterMode Then

If Me.FilterMode Then Me.ShowAllData

End If

Range("A8:P200").Sort key1:=Range("A8"), order1:=xlAscending, Header:=xlNo

End If

Application.EnableEvents = True

Exit Sub

EndMacro:

MsgBox "You did not enter a valid time"

Application.EnableEvents = True

End Sub

Il ne fonctionne pas lorsque je protège ma feuille

Ça, c'est normal ! Il faut déprotéger la feuille au début de la macro et la reprotéger à la fin.

Et, s'il te plait, utilise la balise code pour citer du code dans un post, et indente ton code ! C'est pénible... !

D'accord merci je vous embête plus.

Rechercher des sujets similaires à "executer macro automatiquement"