Comment passer à un autre classeur ?

  • Initiateur de la discussion Initiateur de la discussion demongin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

demongin

XLDnaute Nouveau
Bonjour à tous,

Je rencontre un petit problème qui n'est peut-être pas si petit que ça ! J'ai écris un code qui exécute plusieurs tâches les unes après les autres. Chaque tâches prises indépendamment fonctionnent.

Le principe est de partir d'un classeur source, d'en faire une copie (cible), de le renommer en l'incrémentant puis de fermer le classeur source et de poursuivre le reste du code.

L'exécution pas à pas montre qu'à la fermeture du fichier source, le code s'arrête et on peut voir que le module "actif" appartient toujours au fichier source, il est donc logique sans classeur que l'exécution s'arrête.
J'ai essayé avant la fermeture d'activer le fichier cible et de fermer le source avec un chemin, mais rien à faire, le déroulement du module ne bascule pas sur le classeur cible.

Est-il possible de poursuivre l'exécution d'un code à partir d'un autre classeur ? ou d'activer le module d'un autre classeur pour que le code puisse se poursuivre sans que l'utilisateur intervienne.

NB : il est important que le fichier source soit fermé après que sa copie soit prête.

Je ne suis pas sûr de m'être bien expliqué, alors n'hésitez pas à me poser des questions.

Par avance, merci de votre aide et de vos conseils
 
Dernière édition:
Re : Comment passer à un autre classeur ?

Bonjour demongin, bienvenue sur XLD,

Une solution pour passer la main à une macro "MaMacro" du classeur cible :

- affecter à cette macro "MaMacro" les touches de raccourci Ctrl+a

- dans la macro du fichier source écrire le code :

Code:
SendKeys "^a"
ThisWorkbook.Close

Edit : cela suppose qu'à la fermeture du fichier source il n'y ait pas la boîte de dialogue proposant l'enregistrement des modifications (facile à éviter).

A+
 
Dernière édition:
Re : Comment passer à un autre classeur ?

Merci beaucoup job75

Je viens de trouver d'autres solutions comme Application.run et AppExcel.run, mais la tienne parait bien plus simple et efficace !
j'essaye ça ce soir après le boulot, j'ai hâte d'y être....

A très bientôt pour le résultat.
 
Re : Comment passer à un autre classeur ?

Bonsoir,

C'était la solution ! pourquoi faire compliquer quand on peut faire simple !! 😀

Merci encore job75 😎

J'ai donc couper mon code en deux parties pour pouvoir appeler la seconde en lui attribuant les touches de raccourcis ctrl + t.

Voilà ce que cela donne pour la première partie avec un code de vérification de l'état de modification du classeur, puis de classeur existant au moment de la copie.

Code:
Sub NouveauEA()
 Dim Chemin2 As String, Fichier As String
 Dim Rep As Long
 Dim ltexte As String

'------------------------------------------------------------------------
'----------Copie + Incrémentation du Classeur et de la Feuille-----------
'------------------------------------------------------------------------

'Chemin variable de destination du fichier copié obtenu par la commande Concatener
Chemin2 = Range("A11").Value
'Nom variable du fichier à copier obtenu par la commande Concatener
Fichier = Range("A15").Value & ".xls"

'Texte rtf incluant la mise en forme servant à la boite de dialogue suivante
ltexte = "{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fdecor\fprq2\fcharset0 Stencil;}{\f1\fswiss\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 Verdana;}{\f3\fnil\fprq2\fcharset2 SansSerif;}}" & _
    "{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;\red0\green255\blue0;}" & _
    "{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\qc\cf1\ul\b\f0\fs44 ATTENTION !\par" & _
    "\cf0\ulnone\b0\f1\fs20\par" & _
    "\f2\fs28 L'Etat d'Acompte servant de base \'e0 l'\'e9tablissement de la \par" & vbCrLf & _
    "prochaine situation de travaux a \'e9t\'e9 modifi\'e9 depuis son ouverture !\par" & vbCrLf & _
    "\par" & vbCrLf & _
    "\cf2\ul Vous devez le sauvegarder pr\'e9alablement pour pouvoir continuer.\par" & vbCrLf & _
    "\cf0\ulnone\par" & vbCrLf & _
    "\b Cette action sera irr\'e9versible,\par" & vbCrLf & _
    "\b0\par" & vbCrLf & _
    "En cas de doute, choisissez \b Non\b0  et controlez si les modifications doivent-\'eatre enregistr\'e9es.\par" & vbCrLf & _
    "\f3\par" & vbCrLf & _
    "\cf3\b\f0\fs40 ENREGISTRER ou NON ?\par" & vbCrLf & _
    "\par" & vbCrLf & _
    "}"
  
'Vérifie que le fichier source a été modifié depuis son ouverture (largeur de la boite fixée à 700 pixels)
If Not ThisWorkbook.Saved Then
    Rep = MsgBoxEx(ltexte, vbCritical + vbYesNo, , , , , 700)
     If Rep = vbNo Then
        Exit Sub
      Else
        ThisWorkbook.Save
    End If
End If
    
'Vérifie que le fichier cible n'existe pas et interroge l'utilisateur si Oui
If Dir(Chemin2 & Fichier) <> "" Then  'le fichier existe
    If MsgBox("Ce fichier existe déjà ! Voulez vous le remplacer ?", vbYesNo) <> vbYes Then Exit Sub
    Application.DisplayAlerts = False 'Message de confirmation désactivé
End If
    'Copie le fichier à l'emplacement spécifié
    ActiveWorkbook.SaveCopyAs Chemin2 & Fichier
    Application.DisplayAlerts = True

'Ouvre le fichier copié
Application.Workbooks.Open Chemin2 & Fichier

'Incrémante le nom de la feuille de 1 sur le fichier copié
Sheets(Range("A16").Value).Select
Sheets(Range("A16").Value).Name = Range("A15").Value

'Lance la macro affectée au raccourcis Crtl+t
SendKeys "^t"

'Ferme le fichier source (False : sans sauvegarde / True : avec sauvegarde)
ThisWorkbook.Close

End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
186
Réponses
9
Affichages
601
Retour