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

XL 2016 [résolu] VBA: Nom et date de modification

Belgik

XLDnaute Nouveau
Bonjour,

Je débute sur VBA

J'aimerai qu'excel fasse la liste de la personne (+ date) lorsque quelqu'un modifie le fichier.

En fouillant sur le net j'ai réussi a faire un module qui fonctionne:


Sub ListeModif()
Application.ScreenUpdating = False
feuille_courante = ActiveWorkbook.ActiveSheet.Name

Sheets("A Remplir").Activate
PremLigVide = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
Cells(PremLigVide, 1).Select
ActiveCell = Environ("username")
Cells(PremLigVide, 2).Select
ActiveCell = Format(Now, "dd/mm/yyyy hh:mm:ss")

Sheets(feuille_courante).Activate
Application.ScreenUpdating = True

End Sub


Lorsque je lance la macro manuellement tout va bien.
Par contre lorsque je j'appelle la macro thisWorkBook , excel plante


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

ListeModif

End Sub


Avez vous une idée ? Merci

2ème Pb:

Comment exclure un onglet de l'impression?
Le fichier excel en question est composé de listes remplies manuellement.
J'ai un onglet de paramétrage qu'il ne faut pas imprimé. Est t'il possible de d'exclure cet onglet de l'impression lorsqu'un utilisateur fait "imprimer le classeur entier"?

Je ne peux pas définir de zone d'impression manuellement car j'utilise le compteur de page excel.
(L'utilisateur rentre 1 à 8 pages A4 de données. Excel compte de n'ombre de page et l'affiche en bas de la feuille).
Est t'il possible de définir la zone d'impression en VBA ( si la première case de la page n'est pas vide alors on imprime la page)?

Un tout grand MERCI d'avance

Guillaume
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Belgik, bonjour le forum,

Peut-être comme ça :

VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim AR As Worksheet 'déclare la variable AR (onglet A Remplir)
Dim LI As Integer 'déclare la variable LI (LIgne)

Set AR = Worksheets("A Remplir") 'définit l'onglet AR
If Target.Parent.Name = AR.Name Then Exit Sub 'si le changement a lieu dans l'onglet AR, sort de la procédure
LI = IIf(AR.Range("A1").Value = "", 1, AR.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1) 'définit la ligne LI (première ligne vide de la colonne A de l'onglet AR)
AR.Cells(LI, "A").Value = Environ("username") 'copie le nom
AR.Cells(LI, "B").Value = Format(Now, "dd/mm/yyyy hh:mm:ss") 'copie la date
End Sub
 

Belgik

XLDnaute Nouveau
Merci robert tu mas mis sur la bonne route.

J'ai finalement fait :


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
ListeModif
Application.EnableEvents = True
End Sub

et

Sub ListeModif()
Application.ScreenUpdating = False

Dim TXT As String 'déclaration d'une variable en tant que chaine de caractères

feuille_courante = ActiveWorkbook.ActiveSheet.Name

Sheets("A Remplir").Activate
PremLigVide = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
Cells(PremLigVide, 1) = Environ("username")
Cells(PremLigVide, 2) = Format(Now, "dd/mm/yyyy hh:mm:ss")
TXT = InputBox("Quel est la modification ?", "Modif:") 'Affichage d' l'inputbox pour écrire dans la variable
Cells(PremLigVide, 3) = TXT
Sheets(feuille_courante).Activate

Application.ScreenUpdating = True
End Sub

Et ca marche merci bien
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
748
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…