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

Excel Discussion :

Commander l’insertion d’une feuille sans insérer une nouvelle feuille vierge.


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut Commander l’insertion d’une feuille sans insérer une nouvelle feuille vierge.
    Bonjour,
    Quand je commande l’insertion d’une nouvelle feuille sur un premier fichier, cela active une macro qui va copier une feuille d’un autre fichier pour la placer dans mon premier fichier. Cela créer également l’insertion d’une feuille vierge (commande Excel par défaut). Je voudrais empêcher la création de cette feuille vierge.

    Merci.
    Thomas

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour pouvoir t'aider, il serait plus facile de visualiser le code ( à placer entre balise ).
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Appel une UserForm:
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    UserForm2.Show
    End Sub
    Bouton sur la UserForm qui va chercher et copier la première feuille d'un fichier:
    Private Sub CommandButton1_Click()
    Const FileSource As String = "Sport"
    Const FolderSource As String = "C:\Users\thomas\Documents\"
    Dim wkbSrce As Workbook
    Set wkbSrce = Application.Workbooks.Open(FolderSource & FileSource & ".xlsx")
    wkbSrce.Sheets(1).Copy before:=ThisWorkbook.Sheets(1)
    wkbSrce.Close
    Set wkbSrce = Nothing
    End Sub
    Merci pour l'information Philippe.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour Thomas,
    D'abord pour le code entre balise, c'est presque juste. La balise que tu as activée est pour les citations. La balise des codes se trouve juste à côté (le '#' dièse informatique)
    Je crois que je n'ai pas bien compris la question.
    Tu dis dans ta première question
    Quand je commande l’insertion d’une nouvelle feuille sur un premier fichier
    or, le fichier où l'on crée la feuille est ThisWorkbook donc le classeur cible est le classeur où se trouve le code VBA.
    Un classeur contient toujours au moins une feuille (trois par défaut) alors soit après avoir copier la feuille, tu détruis toutes les feuilles à l'exception de celle où la copie à eu lieu, soit la copie se fait sur un nouveau classeur, alors utilise la méthode Move vers un nouveau classeur (je t'ai déjà donné ce code) et alors il n'y aura qu'une seule feuille.
    [EDIT]
    Code pour détruire toutes les feuilles à l'exception de la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim sh As Worksheet
     Application.DisplayAlerts = False ' Désactive les messages
     With ThisWorkbook
      For Each sh In .Worksheets
       If sh.Name <> .Worksheets(1).Name Then sh.Delete
      Next
     End With
     Application.DisplayAlerts = True
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci,

    Je me suis mal exprimé.
    Avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    UserForm2.Show
    End Sub
    Lorsque je clique sur le bouton « insérer nouvelle feuille » il se passe deux actions : Une nouvelle feuille se crée et UserForm2 s’ouvre. Je voudrais que la UserForm2 s’ouvre mais que la nouvelle feuille ne se crée pas.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code que tu montres est un code placé dans une procédure événementielle de création de nouvelle feuille (en plus c'est moi qui t"ai guidé vers cette procédure).
    C'était je crois ta première question sur ce forum avec comme sujet Par défaut Lancer macro à l'insertion d'une nouvelle feuille
    Donc comme tu lances le UserForm lors de la création d'une nouvelle feuille et évidemment c'est comme le chien qui court après sa queue.
    Chaque fois qu'une feuille est crée, tu lances un UserForm qui lui même insère une nouvelle feuille qui va lancer le UserForm etc...
    Il faut revoir ton analyse.
    Pense d'abord : "Comment ferais-je manuellement ?" et écris cela sur papier (cela s'appelle un algorithme et ensuite on commence à décomposer par groupe de procédures, fonctions etc...
    La programmation demande de la rigueur et de l'organisation.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre du Club
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juillet 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 81
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Oui je comprends.

    Le mieux serait, au lieu de rajouter une feuille comme dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
     Const FileSource As String = "Sport"
     Const FolderSource As String = "C:\Users\thomas\Documents\"
     Dim wkbSrce As Workbook
     Dim Last As Long
     Set wkbSrce = Application.Workbooks.Open(FolderSource & FileSource & ".xlsx")
      Last = ThisWorkbook.Worksheets.Count
     wkbSrce.Sheets(1).Copy after:=ThisWorkbook.Sheets(Last)
     wkbSrce.Close
     Set wkbSrce = Nothing
    End Sub
    de directement remplacer la feuille vierge qui vient de se créer par la copie que l'on importe (existe-t-il une fonction pour cela? Quelquechose comme remplacer le "copy" du code par un "replace"). Sinon je pense arriver à simplement supprimer sans problèmes cette avant dernière feuille mais ça ne semble pas la méthode la plus propre.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    On peut tout faire.
    Le premier ami du programmeur VBA est l'enregistreur de macros.
    Fais des essais et reviens si tu ne comprends pas comment améliorer le code. C'est la meilleure manière d'apprendre.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/07/2015, 15h14
  2. Réponses: 6
    Dernier message: 20/08/2014, 14h50
  3. renommer une nouvelle feuille à partir d'une cellule
    Par girphi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/09/2008, 19h50
  4. Réponses: 2
    Dernier message: 23/04/2007, 14h26
  5. insérer une nouvelle feuille Excel à partir d' Access
    Par Sebastien_INR59 dans le forum Access
    Réponses: 2
    Dernier message: 06/08/2006, 18h47

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