Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

si changement dans plage alors remplissage cellule

  • Initiateur de la discussion Initiateur de la discussion zesuila
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zesuila

XLDnaute Occasionnel
Bonjour
Comment peut on faire pour remplir une cellule précise lorsque une plage a été modifié.
Plus clairement (enfin j'espère !!!)
Si dans la plage A4:F21 :
cellule C6 modifiée alors En G6 = username de la personne qui a modifiée la cellule
cellule d8 modifié alors en G8 = username de la personne qui a modifiée la cellule
et ainsi de suite...

suis sûr que vous allez me concoter cela en quelques secondes, que dis-je quelques millièmes de secondes 😀

merci
 
Re : si changement dans plage alors remplissage cellule

alors je viens de voir la solution de Jacques et elle pourrait m'interesser sauf que le code de jacques ne prnds en compte qu'une colonne précise par contre une petite idée m'est venue :
Et si on fusionnait les 2 codes celui de job75 et celui de jacques :
c'est à dire d'abord celui de job qui indique une "nouvelle" entrée et celui de jacques qui va mettre à jour les modif en commentaire.

voici les 2 codes :
'celui de job75
Dim ref As Range
Set ref = Intersect(Target, Range("A4:AF21"))
If ref Is Nothing Then Exit Sub
For Each ref In ref
Range("AH" & ref.Row) = Environ("UserName") & " - " & Date
Next

'et celui de jacque
Application.EnableEvents = False
If Target.Column = 34 And Target.Count = 1 Then ' colonne 3 seulement
If Target.NoteText = "" Then Target.AddComment ' Création commentaire
Target.Comment.Text Text:=Target.Comment.Text & " Modifié par: " & Environ("UserName") & _
" Le " & Now & vbLf
Target.Comment.Shape.TextFrame.AutoSize = True
End If
Application.EnableEvents = True

qu'en pensez vous est ce une idée stupide ? ou commence je à devenir un tout petit peu calé en "reflexion" vba (et je n'ai pas écrit en utilisation vba , pas assez fort encore !)
 
Re : si changement dans plage alors remplissage cellule

Re,

Pour répondre à Papou-net (et à Hulk), mon code étudie, je me répète, toutes les cellules de la plage modifiée (ref).

On peut en effet modifier toute une plage (éventuellement multiple) avec Ctrl+Entrée, mais on peut aussi l'effacer...

J'ai considéré qu'un effacement est bien une modification.

A+
 
Re : si changement dans plage alors remplissage cellule

Re,

zesuila alors... sélectionner une plage puis dans la barre de formule écrire TOTO et valider parCtrl+Entrée...

Pour en revenir à nos moutons, pour l'historique, je mettrais bien les données à la suite dans les colonnes avec le code suivant :

Code:
Private Sub worksheet_Change(ByVal Target As Range)
Dim ref As Range, col As Integer
Set ref = Intersect(Target, Range("A4:F21"))
If ref Is Nothing Then Exit Sub
For Each ref In ref
col = Application.Max(34, Cells(ref.Row, 256).End(xlToLeft).Column + 1) 'colonne AH = 34
Cells(ref.Row, col) = Environ("UserName") & " - " & Date
Next
End Sub

A+
 
Re : si changement dans plage alors remplissage cellule

pour le "toto" c'est ok

Pour le code, cela peut être une solution mais le fait de remplir de nouveau des colonnes a la suite me gêne un peu par rapport aux futurs utlisateurs.
Non le truc idéal c'est d'avoir par exemple en AH ton code (pour dire quand la cellule a été remplie pour la 1ere fois) puis en AH (ou ailleurs) le code de jacques qui mettrait sous forme de commentaires les modifs de la ligne)
 
Re : si changement dans plage alors remplissage cellule

Re,

L'idée de mettre les historiques en commentaires est en effet excellente.

Voici mon code modifié pour mettre les commentaires en colonne AH :

Code:
Private Sub worksheet_Change(ByVal Target As Range)
Dim ref As Range, txt$, com$, ret$ '$ signifie As String
Set ref = Intersect(Target, Range("A4:F21"))
If ref Is Nothing Then Exit Sub
On Error Resume Next
txt = Environ("UserName") & " - " & Date
For Each ref In ref
  If Range("G" & ref.Row) = "" Then
    Range("G" & ref.Row) = txt
  Else
    com = ""
    ret = Chr(10) 'retour à la ligne
    com = Range("AH" & ref.Row).Comment.Text
    If com = "" Then Range("AH" & ref.Row).AddComment: ret = ""
    Range("AH" & ref.Row).Comment.Text Text:=com & ret & txt
  End If
Next
End Sub

A+
 
Re : si changement dans plage alors remplissage cellule

😱😱😱😱😱😱😱 ouahhhhhhhhhhhhhhhhhhhhhh !!!!
Génial !
Vraiment merci Job75 de ton aide, mon programme a vraiment de la gueu... maintenant.
Je te souhaite un excellent week end
Et encore merci à toi et à papou-net, jacques et Hulk (faut pas l'oublier sinon il sera vert de rage !)

Pour info et pour les autres excelliens , dans le code de job75 , je n'ai changé que la colonne G en AG car c'était elle qui était concerné dans mon programme.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

P
Réponses
2
Affichages
1 K
PAGLICED
P
A
Réponses
1
Affichages
1 K
Astragor
A
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…