Afficher ET utiliser la dernière feuille vba

Bonjour a tous et toutes,
Ma question est la suivante :
Comment afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) en VBA ?
Je m'explique :
J'ai 2 classeurs, le premier [calendrier] crée un calendrier sur une année complète + 7 jours qui va générer un second classeur [planning] avec pléthore d'onglets (53 à 55 onglets correspondants aux nombre de semaines de cette même année +7 jours). Ses onglets sont nommés en fonction du n° de semaine et de l'année (S_n°semaine_année)
Mon souci est que je dois sélectionner un code dans l'onglet S_n°semaine_année qui se trouve dans un autre onglet (Salariés).
En fait pour faire court il faut que je dise a Excel d'aller chercher l'information désirée et de me réafficher l'onglet sur lequel je viens de faire ma dernière sélection.

Ci-dessous le lien des classeurs liés.
http://www.cijoint.fr/cjlink.php?file=cj201108/cijTpcYDKX.zip

Si je n'ai pas été assez clair n'hésitez pas...

Merci par avance pour votre aide et au plaisir de vous lire.

2 réponses

  1. Modérateur
    Bonjour,
    En gros, avant d'aller chercher ton info, tu notes le nom de la feuille ou tu es. Après avoir pris l'info, tu reviens sur ta feuille.

    Dim MaFeuilleDeDepart As String 
    Dim MonInfo As String 
    
    MaFeuilleDeDepart = ActiveSheet.Name 
    Sheets("Salaries").Select 
    MonInfo = Range("C4").Value 
    Sheets(MaFeuilleDeDepart).Select 
    Range("A1") = MonInfo


    Mais il y a plus simple. Tu peux aller chercher ton info sans bouger de ta feuille :
    Dim MonInfo As String 
    With Sheets("Salaries") 
        MonInfo = .Range("A4").Value 'Ne pas oublier le point devant Range 
    End With 
    Range("A1") = MonInfo 'Et là ya pa'd point

    Cordialement,
    Franck P
    0
    1. Voila mon code :

      Sub cherche_caissier(trouve_caissier As Range)
      Dim nbsalaries As Integer
      Dim rngrecherche As Range 'déclaration d'une plage de cell
      Dim numcaissier As Range
      Dim dateselect As Date
      Dim i As Integer
      Dim trouver1 As Boolean
      Dim trouver2 As Boolean
      Application.ScreenUpdating = False
      If Not trouve_caissier.Value = "" Then
      dateselect = ActiveSheet.Cells(trouve_caissier.Row, 6)
      Sheets("Salariés").Activate
      nbsalaries = Range("B500").End(xlUp).Row
      Set rngrecherche = Sheets("Salariés").Range(Cells(2, 2), Cells(nbsalaries, 2))

      Set numcaissier = rngrecherche.Find(trouve_caissier.Value, LookIn:=xlValues)

      If Not numcaissier Is Nothing Then 'si tu trouves alors
      'If Format(dateselect, "dd/mm/yyyy") > Format(Cells(numcaissier.Row, 11), "dd/mm/yyyy") And Cells(numcaissier.Row, 11) <> "" Then
      If dateselect > Format(Cells(numcaissier.Row, 11), "dd/mm/yyyy") And Cells(numcaissier.Row, 11) <> "" Then

      MsgBox ("le contrat a expiré, vous ne pouvez pas planifier ce collaborateur")
      ActiveSheet.Activate
      Exit Sub
      End If

      Sheets("Planning").Cells(trouve_caissier.Row, 8) = Cells(numcaissier.Row, 3) ' je récup le nom
      Sheets("Planning").Cells(trouve_caissier.Row, 9) = Cells(numcaissier.Row, 4) ' je récup le prénom

      'vérifier ses dispos
      trouver = False
      For i = 13 To 19

      If Sheets("Salariés").Cells(numcaissier.Row, i) = Sheets("Planning").Cells(trouve_caissier.Row, 2) Then
      Sheets("Planning").Cells(trouve_caissier.Row, 11) = "Après midi"
      trouver1 = True
      End If

      Next i

      For i = 20 To 26
      If Sheets("Salariés").Cells(numcaissier.Row, i) = Sheets("Planning").Cells(trouve_caissier.Row, 2) Then
      Sheets("Planning").Cells(trouve_caissier.Row, 11) = "Matin"
      trouver2 = True
      End If

      Next i
      If trouver1 = False And trouver2 = False Then
      Sheets("Planning").Cells(trouve_caissier.Row, 11) = "Journée"
      End If

      If trouver1 = True And trouver2 = True Then
      Sheets("Planning").Cells(trouve_caissier.Row, 11) = "Indisponible"
      End If
      Call MFC1(trouve_caissier)

      Else
      Sheets("Planning").Cells(trouve_caissier.Row, 8) = "" ' je récup le nom
      Sheets("Planning").Cells(trouve_caissier.Row, 9) = "" ' je récup le prénom
      End If
      Sheets("Planning").Cells(trouve_caissier.Row, 1) = Sheets("Planning").Cells(trouve_caissier.Row, 3) & Sheets("Planning").Cells(trouve_caissier.Row, 7)
      Else
      Sheets("Planning").Cells(trouve_caissier.Row, 1) = Sheets("Planning").Cells(trouve_caissier.Row, 3)
      End If

      Sheets("Planning").Activate

      'vidage mémoire variables
      Set rngrecherche = Nothing
      Set numcaissier = Nothing
      Application.ScreenUpdating = True

      End Sub

      En faite je ne trouve pas où je dois mettre ce que vous conseillez...
      Je voudrais changer le "Sheets("Planning") par le dernier onglet selectionné ou travaillé.

      Au plaisir de vous lire.
      0
      1. Modérateur
        Bonjour,
        Ton code ne nous aide pas vraiment...
        D'où lance tu ce code?
        Comment faire pour savoir qu'elle est la dernière feuille utilisée?
        Décris nous l'utilisation de ce fichier et plus précisément quand, ou, comment et pourquoi tu lances cette macro?
        0
      2. Bonjour,

        ci dessous le lien des classeurs.
        http://www.cijoint.fr/cjlink.php?file=cj201108/cijT9uAEwj.zip

        Il y a une zone de texte dans le classeur calendrier qui explique a quoi il sert.

        Il y a egalement une zone de texte dans le classeur "Planning_caisse_original_avec_onglet" qui explique où se trouve le problème.

        Le classeur Planning_caisse_original est présent pour tester car calendrier et ce dernier sont liés (autant tout mettre au cas où il y aurais des tests a faire...).
        0
      3. Modérateur
        Combien de temps dure l'exécution de ta macro?
        Combien de fois plante t'elle ton excel avant de fonctionner?
        0
      4. L'execution dure enveron 5 mins le temps de tout faire entre le calendrier et le planning.
        Elle ne m'a jamais planté mon excel ...
        0
      5. Modérateur
        Elle vient de me planter le mien trois fois de suite. Je sais j'insiste...
        Je l'ai laissé tourner presque 10 minutes sans résultat.
        Ca va être dur de t'aider...
        Je vais continuer à regarder sans tester....... Mais sans aucune garantie de résultat!
        Ok?
        0