Execution macro et retour sur bon onglet

Gexk5

XLDnaute Occasionnel
Bonsoir le forum,
Voici mon problème, pour alerter imprimer une feuille en automatique, j'ai 53 onglets (1 par semaine ), en colonne T , si une valeur est égale à 5, je copie le nom de la colonne AA sur une autre feuille, j'imprime, jusque la c'est OK, le problème comment retourner sur l'onglet d'ou je suis parti, effacer le nom et continuer la macro????
Pas tres facile a expliquer, peut etre mieux dans mon exemple joint

Merci d'avance pour votre aide toujours très apréciée
 

Pièces jointes

  • Retour onglet.xls
    30 KB · Affichages: 66
C

Compte Supprimé 979

Guest
Re : Execution macro et retour sur bon onglet

Salut Gexk5,

Petit code à mettre dans "ThisWorkbook" et à tester
Code:
Private Sub Workbook_SheetActivate(ByVal Sht As Object)
  Dim ShtE As Worksheet, Lig As Long
  ' Si la feuille que l'on active n'est pas une feuille de semaine : on sort
  If Left(Sht.Name, 1) <> "S" Then Exit Sub
  ' Définir en variable objet la feuille d'entrtien
  Set ShtE = Sheets("Entretien")
  ' Avec la colonne "T" de la feuille activée
  With Sht
    .Range("T1").Select
    On Error Resume Next
    Do
      Lig = 0 ' Initialiser le numéro de ligne trouvée à 0
      ' Trouver l'occurence du chiffre 5
      Lig = .Columns("T:T").Find(What:=5, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
                                 xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
      ' Si la ligne a été rouvée
      If Lig <> 0 Then
        ' Empècher d'autres évènements
        Application.EnableEvents = False
        ' Sélectionner la ligne en question (pas obligatoire)
        Sht.Range("T" & Lig).Select
        ' Inscrire le nom de la ligne en B9 de la feuille entretien
        ShtE.Range("B9").Value = Sht.Range("AA" & Lig).Value
        ' Imprimer la feuille entretien
        ShtE.PrintOut
        ' Effacer la valeur et le nom
        Sht.Range("T" & Lig).ClearContents
        Sht.Range("AA" & Lig).ClearContents
        ' Activer de nouveau les évènements
        Application.EnableEvents = True
      End If
    Loop While Lig <> 0
    On Error GoTo 0
    ' Au cas ou
    Application.EnableEvents = True
  End With
End Sub

A+
 

Gexk5

XLDnaute Occasionnel
Re : Execution macro et retour sur bon onglet

Re le forum,Bruno
J'ai testé et c"est bon ( je n'en doutais pas) , seule petite question, j'ai intégré une boite de dialogue pour avoir le choix ou non d'imprimer les fiches, ou dois je inserer mon code pour que cela fonctionne??

Select Case MsgBox("" & Range("AA" & i) & " : " & " " & " Absent depuis plus d'une semaine !!! Voulez vous imprimer la fiche d'entretien de reprise", vbYesNo + vbQuestion, "IMPRESSION DU FORMULAIRE")
Case vbYes
executer le code,,,,,,,,,,,,,,,,,,,,

Case vbNo
End Select

Sortir du code,,,,,,,,,,,,,,,

Merci de vos reponses
 
C

Compte Supprimé 979

Guest
Re : Execution macro et retour sur bon onglet

Salut Gexk5

Il faut mettre l'instruction au niveau de : ShtE.PrintOut
Code:
If MsgBox("" & Range("AA" & i) & " : " & " " & " Absent  depuis plus d'une semaine !!! Voulez vous imprimer la fiche d'entretien  de reprise", vbYesNo + vbQuestion, "IMPRESSION DU FORMULAIRE")=vbYes Then
' Imprimer la feuille entretien
ShtE.PrintOut
End If

A+
 

Gexk5

XLDnaute Occasionnel
Re : Execution macro et retour sur bon onglet

Rele forum, Bruno,
Merci pour ta reponse mais ne fonctionne pas, le code n'est pas pris en compte , ca imprime directement sans méssage
Je vais essayer de mon coté mais si vous avez des idées, elles seront les bienvenues
 
C

Compte Supprimé 979

Guest
Re : Execution macro et retour sur bon onglet

Salut,

Rele forum, Bruno,
Merci pour ta reponse mais ne fonctionne pas, le code n'est pas pris en compte , ca imprime directement sans message
Impossible ...
Désolé de te le dire comme ça mais si ça ne marche pas, c'est que tu as mal intégré le code ;)

VB:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sht As Object)
  Dim ShtE As Worksheet, Lig As Long
  ' Si la feuille que l'on active n'est pas une feuille de semaine : on sort
  If Left(Sht.Name, 1) <> "S" Then Exit Sub
  ' Définir en variable objet la feuille d'entrtien
  Set ShtE = Sheets("Entretien")
  ' Avec la colonne "T" de la feuille activée
  With Sht
    .Range("T1").Select
    On Error Resume Next
    Do
      Lig = 0 ' Initialiser le numéro de ligne trouvée à 0
      ' Trouver l'occurence du chiffre 5
      Lig = .Columns("T:T").Find(What:=5, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
                                 xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
      ' Si la ligne a été rouvée
      If Lig <> 0 Then
        ' Empècher d'autres évènements
        Application.EnableEvents = False
        ' Sélectionner la ligne en question (pas obligatoire)
        Sht.Range("T" & Lig).Select
        ' Inscrire le nom de la ligne en B9 de la feuille entretien
        ShtE.Range("B9").Value = Sht.Range("AA" & Lig).Value
        If MsgBox("" & Range("AA" & Lig) & " : " & " " & " Absent  depuis plus d'une semaine !!! Voulez vous imprimer la fiche d'entretien  de reprise", _
          vbYesNo + vbQuestion, "IMPRESSION DU FORMULAIRE") = vbYes Then
          ' Imprimer la feuille entretien
          ShtE.PrintOut
        End If
        ' Effacer la valeur et le nom
        Sht.Range("T" & Lig).ClearContents
        Sht.Range("AA" & Lig).ClearContents
        ' Activer de nouveau les évènements
        Application.EnableEvents = True
      End If
    Loop While Lig <> 0
    On Error GoTo 0
    ' Au cas ou
    Application.EnableEvents = True
  End With
End Sub

A+
 

Gexk5

XLDnaute Occasionnel
Re : Execution macro et retour sur bon onglet

Re le forum, Bruno
En effet comme tu le dis, j'avais mis le code au mauvais endroit.
Merci pour ta patience et la correction, ca fonctionne très bien

Merci encore
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 980
Membres
103 997
dernier inscrit
SET2A