IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Focus sur 2e classeur Excel en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut Focus sur 2e classeur Excel en VBA
    Bonjour. Je vais essayer de faire simple en allant à l'essentiel.
    J'ai 2 classeurs ouverts dans la même instance d'Excel; le classeur 1 peut mettre à jour le classeur 2 soit en mode automatique, soit en mode manuel suivi immédiatement du mode automatique.
    Le mode automatique seul ne pose pas de problème; c'est lorsque le mode manuel doit s'effectuer avant que cela se corse...
    Pour cela, il faudrait donc que la procédure du classeur 1 fasse les actions suivantes :
    - activer le classeur 2
    - rendre visible la ListBox de la feuille 1
    - activer la mise à jour de l'affichage
    - lui donner le focus comment ?
    (modifications manuelles et successives effectuées par l'utilisateur)
    - reprendre le focus (classeur 1) comment ?
    - faire la mise à jour automatique
    - enregistrer le classeur 2 et le fermer

    Sachant qu'il ne s'agit pas d'attendre la fin d'un processus, que le choix dans la ListBox ne peut pas se faire automatiquement.
    Ma question est :
    Est-il possible qu'une procédure du classeur 1 donne la main au classeur 2 ? Comment ?
    Comment le classeur 2 peut-il reprendre la main ? (réponse à une boite de dialogue style "cliquez sur OK quand vous avez terminé la màj")

    Sinon quelle autre solution ?

    Je reste à votre disposition pour tout complément d'information.
    Cordialement

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Supposons que l'un des classeurs s'appelle Classeur3.xlsm et l'autre Classeur4.xlsm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Dans ThisWorBook de Classeur3.xlsm
    Private Sub Workbook_Activate()
     Debug.Print ThisWorkbook.Name & " activate"
     'Code a executer
    End Sub
     
    'Dans un module de Classeur3.xlsm
    Sub ActiverClasseur4()
     Workbooks("Classeur4.xlsm").Activate
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Dans ThisWorBook de Classeur4.xlsm
    Private Sub Workbook_Activate()
     Debug.Print ThisWorkbook.Name & " activate"
     'Code a executer
    End Sub
     
    'Dans un module de Classeur4.xlsm
    Sub ActiverClasseur3()
     Workbooks("Classeur3.xlsm").Activate
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut
    Merci de votre réponse Docmarti, mais ceci n'est pas possible pour plusieurs raisons. (je ne voulais pas trop rentrer dans les détails mais bon...)
    Le classeur 1 (principal) permet une multitude de fonctions, dont celle d'export qui permet de mettre à jour le classeur 2 (qui est à usage professionnel, qui contient des données propres à chaque employé et qui n'est modifiable, sauf sur quelques cellules non protégées).
    Voici une partie de code de la procédure d'export du classeur 1 que je n'arrive pas à terminer car je ne sais pas comment la mettre en "pause" pour autoriser la modification manuelle du classeur 2, puis la faire reprendre lorsque cette modification est terminée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
                    Rep = MsgBox(m, vbQuestion + vbYesNo, T)
                    If Rep = vbYes Then
                        K.Sheets(iO1).Activate          ' onglet 1
                        ' vérification RT
                        T = "Vérification du régime de travail"
                        m = "Le régime actuel est :" & vbLf & [ChoixRégime] & vbLf & vbLf & "Voulez-vous le modifier ?"
                        Rep = MsgBox(m, vbQuestion + vbYesNo + vbDefaultButton2, T)
                        If Rep = vbYes Then
                            dH = [dureeHebdo]: txU = [tauxUtil]: NbS = [nbSemCycle]
                            Application.ScreenUpdating = True
                            ' activer le choix du régime
                            ActiveSheet.ListeRégime.Visible = True
                            T = "Modification R.T de " & e_NOM
                            m = "Veuillez modifier le régime de travail puis poursuivez le déroulement du formulaire en cliquant sur les boutons " & G & "Continuer" & G & "jusqu'à la section 6."
                            MsgBox m, vbInformation, T
                            ' puis choisir le régime
                            T = "ATTENTE FIN DE MISE A JOUR"
                            m = "Lorsque vous aurez validé la section 6, n'oubliez-pas de cliquer sur le bouton OK de cette boite de dialogue !" & vbLf & vbLf & "Avez-vous cliqué sur le bouton Valider de la section 6 ?"
                            Do
                                ' ?
                                DoEvents
                                Rep = MsgBox(m, vbQuestion + vbYesNoCancel + vbDefaultButton2, T)
                            Loop While Rep = vbNo
                            If Rep = vbCancel Then
                                Application.EnableEvents = True
                                Set K = Nothing
                                Exit Sub
                            End If
                            ThisWorkbook.Activate
                            Application.ScreenUpdating = False
                            '
                        End If
                        ' écriture des valeurs                    (mise à jour en mode automatique)
                        ActiveSheet.Unprotect (MdP)
                        If ActiveSheet.boutonModification = False Then ActiveSheet.boutonModification = True
                        If [aCompter] <> CDate(e_DATE) Then [aCompter] = CDate(e_DATE)
                        [dateSign] = Date
                        RT_C = [nbSemCycle]
    Cordialement.

Discussions similaires

  1. Partage de classeur excel en VBA
    Par planete.gonz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2009, 11h02
  2. Sauvegarde d'un classeur Excel en VBA
    Par olivepao dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 28/02/2008, 16h50
  3. Tri sur plusieurs classeur excel
    Par Cyril28 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/02/2008, 17h10
  4. ouvrir classeur excel en vba
    Par isis1be dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/10/2007, 15h49
  5. [VBA-E]travail sur deux classeurs excel
    Par richou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/04/2006, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo