XL 2019 Automatiser une macro

UpTeNiX

XLDnaute Nouveau
Bonjour à tous,

J'essaie de me constituer un classeur me permettant de relancer plus efficacement mes clients selon leur fréquence d'achat. Etant débutant en macro, je galère encore pas mal à en faire ce que je veux.
J'ai besoin de votre aide pour automatiser la macro du document joint; l'idée serait que à chaque uptade de la colonne H, et suivant les jours qui passent, elle se mette à jour automatiquement.

Merci d'avance !
 

Pièces jointes

  • Test macro auto.xlsm
    50.9 KB · Affichages: 4

Ikito

XLDnaute Occasionnel
Bonjour UpTeNiX,

EDIT : "H1:H100" correspond à la plage de tes données.
EDIT2 : J'ai éclaté tes formules, copie-colle les de ton ancien classeur :rolleyes:

N'oublie pas d'adapter les Range avec ceux présents dans ton fichier source.

A placer dans Feuil1 :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H1:H100")) Is Nothing Then
        Call Macro1
    End If
End Sub

A placer dans un Module :

VB:
Sub Macro1()

Application.ScreenUpdating = False

    Range("A6:I11").AutoFilter
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("H6:H11"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A6:I11").AutoFilter
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Test macro auto.xlsm
    56.3 KB · Affichages: 2

UpTeNiX

XLDnaute Nouveau
J'ai en effet une répétition, du à une première macro pour la date;
Si j'ai bien compris aucune worksheet ne doit pas être répété ?

Code de ma feuille de base :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("F4:G" & Range("G65536").End(xlUp).Row)) _
        Is Nothing Then

    Range("H" & Target.Row).Value = Date

End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H1:H100")) Is Nothing Then
        Call Macro1
    End If
End Sub
 

Ikito

XLDnaute Occasionnel
UpTeNix,

Deux sub ne peuvent avoir le même nom. Il suffit de concaténer :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("F4:G" & Range("G65536").End(xlUp).Row)) _
        Is Nothing Then

    Range("H" & Target.Row).Value = Date

End If

    If Not Intersect(Target, Range("H1:H100")) Is Nothing Then
        Call Macro1
    End If
End Sub
 

Discussions similaires

Réponses
4
Affichages
180
Réponses
15
Affichages
727
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 111
Messages
2 085 395
Membres
102 882
dernier inscrit
Sultan94