VBA: Nom et date de modification

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

Bonjour,

Pour ton 2ème Pb: il suffit de masquer la feuille que l'on ne veut pas imprimer.

ric

Bonjour,

En premier, dans ta macro ListeModif, il serait bon de supprimer les Select.

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) = Environ("username")
   Cells(PremLigVide, 2) = Format(Now, "dd/mm/yyyy hh:mm:ss")

   Sheets(feuille_courante).Activate

   Application.ScreenUpdating = True
End Sub

Ensuite, en utilisant Private Sub Workbook_SheetChange, tu crées une boucle infinie, c'est pour cela qu'Excel plante.

Dès qu'il y a un changement, ListeModif s'exécute ... il y a donc écriture ... et ListeModif s'exécute à nouveau ... d'où la boucle.

En utilisant

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   Module1.ListeModif
End Sub 

ListeModif ne s'exécute que si on enregistre le classeur, ce qui est suffisant pour savoir qui l'a modifié.

ric

Bonjour et bienvenue sur le forum

Bonjour à tous

Pour éviter la boucle de la macro événementielle :

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

Bye !

Bonjour à tous,

@gmb .... excellent, je note.

ric

Bonjour,

Merci pour vos réponses.

Ça fonctionne très bien

Merci

Rechercher des sujets similaires à "vba nom date modification"