XL 2016 Date de remplissage d'une cellule dans la colonne à côté

masrino

XLDnaute Nouveau
Bonjour à tous,

Alors je suis un réel débutant en VBA donc pas de moquerie s'il vous plaît.

Je souhaite afficher automatiquement la date de remplissage d'une cellule dans la colonne d'à côté et pour cela j'utilise :


VB:
 Private Sub Worksheet_Change(ByVal Target As Range)

    Dim h, iSct As Range
    Set iSct = Intersect(Target, Range("D:D"))
    If iSct Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each h In iSct.Cells
    If IsEmpty(h) Then
    h.Offset(0, 1) = ""
    Else
    h.Offset(0, 1) = Format(Now, "mm/dd/yy")
    End If
    Next
    Application.EnableEvents = True
    
End Sub

C'est un copié-collé trouvé sur le forum d'ailleurs donc je n'ai pas tout compris (par exemple à quoi correspond iSct...)
Tout fonctionne à merveille mais ma question est la suivante :

Je souhaite faire la même chose quelques colonnes plus loin (date qui dépendra du remplissage d'une cellule différente) sur la même feuille, que dois-je rajouter ?

C'est à ce moment là qu'il ne faut pas se moquer de moi :rolleyes:
J'ai essayé un copié collé en modifiant la variable mais ça ne doit pas être suffisant ou bien il y a autre chose à faire

Je vous remercie grandement d'avance.

Cordialement.

Marc
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

La seule chose que je peux te dire, c'est que le iSect est une variable de type Range, et qu'elle contient l'ensemble des cellules communes à deux plages : Target et D : D.

D : D est la colonne D.
Target est l'ensemble des cellules modifiées par l'utilisateur.
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Personne ne se moque ici. Ceux qui savent aident ceux qui ne savent pas.
Dans ce code, il suffit de lister les cellules, les colonnes séparées par "," où ça doit se faire dans la constante ListeDesPlages.

Si tu as 3 colonnes par exemple les colonnes C, E et K:
Private Const ListeDesPlages = "C:C,E:E,K:K"

VB:
Private Const ListeDesPlages = "A1,B6:B8,D:D,F4"

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim Cellule As Range
    Dim TabRanges() As String

    'Récupère la liste des plages
    TabRanges = Split(ListeDesPlages, ",")
    
    'Inhibe ce traitement récursif
    Application.EnableEvents = False

    'Parcours des plage à traiter
    For i = 0 To UBound(TabRanges)
        If Not Intersect(Target, Me.Range(TabRanges(i))) Is Nothing Then
            For Each Cellule In Intersect(Target, Me.Range(TabRanges(i))).Cells
                Cellule.Offset(0, 1).Value = Format(Now, "dd/mm/yy")
            Next Cellule
        End If
    Next i
    
    'Désinhibe ce traitement récursif
    Application.EnableEvents = True
End Sub
 
Dernière édition:

masrino

XLDnaute Nouveau
Bonjour,

La seule chose que je peux te dire, c'est que le iSect est une variable de type Range, et qu'elle contient l'ensemble des cellules communes à deux plages : Target et D : D.

D : D est la colonne D.
Target est l'ensemble des cellules modifiées par l'utilisateur.

Merci à toi Marcel32, c'est toujours bon à savoir :)

Personne ne se moque ici. Ceux qui savent aident ceux qui ne savent pas.
Dans ce code, il suffit de lister les cellules, les colonnes séparées par "," où ça doit se faire dans la constante ListeDesPlages.

Un grand merci pour ton aide, tout marche nickel !

J'ai même trouvé le moyen d'adapter mon code d'origine grâce à toi !

A bientôt peut-être pour de nouvelles questions. ;)

Marc
 

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 729
Messages
2 081 971
Membres
101 852
dernier inscrit
dthi16088