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 :

Ouverture d'une feuille excel via une autre feuille excel.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Points : 38
    Points
    38
    Par défaut Ouverture d'une feuille excel via une autre feuille excel.
    Bonjour,

    Je ne sais pas si je m'exprime bien dans ma question mais je vais tenter de le formuler autrement.

    Avant tout , j'ai lu la F.A.Q pour savoir si la réponse a ma question s'y trouvais.

    Je penses avoir trouver quelque chose comme sa mais j'ai pas compris nécessairement comment m'en servir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks.Open "d:\tuto.xls"
    En gros ce que je veux c'est assez simple.

    Je voudrais une feuille excel ( master ) qui permet aux usager qui l'ouvre , d'aller chercher une autre feuille excel.

    Via une liste dans le classeur maître.

    Maitre.xls
    -----------------

    Compagnie_1
    Compagnie_2
    Compagnie_3
    etc..

    Donc que de cliquer sur Compagnie 1 , ouvre Compagnie_1.xls.

    Es-ce que c'est possible ?

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut Confusion ?
    Bonsoir,

    J'ai l'impression que vous confondez feuille et classeur.

    Une feuille fait partie d'un classeur (onglet)

    Alors vous parlez de Compagnie_1.xls m'extension évoque un classeur.
    La méthode pour ouvrir une feuille dans un classeur ou pour ouvrir un classeur est différente donc il faut préciser.
    Cordialement.

    RJ

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    En effet,

    Ce que je veux donc c'est que dans mon classeur principal , j'ouvrir un autre classeur et que j'importe tout ses feuilles ( onglet )

    Donc pour un classeur de 2 feuilles , l'ouvrant j'aurait 3 onglet

    celle de base du principal et celle que je viens d'ouvrir.

    Es-ce possible ?

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    Si ce que tu veux est de créer un nouveau classeur avec une ou plusieurs feuilles de celui d'origine en lui en ajoutant une (plus vierge).

    Tu peux déjà t'intéresser à l'enregistreur de macro, qui s'il ne te donne pas toujours un code optima,l te fournit les mots clefs qui orienteront ta recherche.

    dans le cas présent, pour une feuille on aura ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro3()
    ' Macro3 Macro
    ' Macro enregistrée le 19/12/2009 par Didier
        Workbooks.Add
        Windows("Classeur1").Activate
        Sheets("Feuil1").Select
        Sheets("Feuil1").Copy Before:=Workbooks("Classeur3").Sheets(1)
    End Sub


    Attention toutefois, si tu as du code dans l'objet feuille considéré, il sera copié avec.

    Sinon, plus simple je pense serait par code de faire une copie de ton classeur avec un nouveau nom, et sur cette copie tu effaces les feuilles que tu ne voulais pas transférer et ajoute le nombre voulu de vierges.

    Attention, du coup tout le code vba sera copié, mais dans les tutos et FAQ, il y a comment y remédier.

    vois les mots clefs ThisWorkbook et ActiveWorkbook dans l'aide vba et dans le lien qui suit :

    http://bidou.developpez.com/tutoriels/ExcelVBA/
    PS : lis les règles du forum et les messages en haut des pages, ton post aurait plus de succès dans le forum vba


    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    bonsoir,

    Je te joins un exemple qui devrait te donner quelques idéees pour ce que tu veux faire.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    Sub liste_des_macros_v3_JMQ()
    '==============================================================================================
    'http://www.developpez.net/forums/d852635/logiciels/microsoft-office/excel/macros-vba-excel/ouverture-feuille-excel-via-feuille-excel/
    '
    ' arrangé pour JonathanMQ par Radinor
    ' ouvre, et ferme séquentiellement chaque classeur de la feuille "liste_macros" du
    ' classeur "maître".
    ' Pour application : écrit le "fullname" des dits classeurs sur la feuille "liste_macros"
    ' du classeur "maître".
    ' Ne doit pas fermer ni ouvrir les classeurs déjà ouverts. Cette macro traite uniquement le
    ' cas des classeurs ouverts en début de macro.
    ' Ne sont pas traités non plus tous les cas d'erreur d'ouverture.
    ' On peut aussi écrire sur un fichier texte fic2. Ce qui va nous servir à écrire les erreurs
    ' d'ouverture des classeurs
    '===============================================================================================
    '---------------------------------------------------
    ' classeurs ouverts
    '------------------
    Dim t_cls_ouverts(100) As String
    Dim i As Integer, cls_ouverts As Integer
    Dim cl As Workbook
    Dim nb_cls_ouverts As Integer
    Dim cl_ouvert As Boolean
    '
    'stocker les "FullName" des classeurs ouverts
    '
    i = 0
    For Each cl In Workbooks
        i = i + 1
        t_cls_ouverts(i) = cl.FullName
    Next
    nb_cls_ouverts = i
    '----------------------------------------------------
    ' feuille de la liste des classeur à lister
    '------------------------------------------
    Dim objcl_liste_cl As Workbook                      ' classeur  objet
    Dim cl_liste_cl_name As String                      ' classeur.name String  name
    Dim fl_liste_cl As String                           ' feuille   String
    fl_liste_cl = "liste_classeurs"                     ' affectation   nom     feuille
    '--------------------------------
    ' feuille résultats listes macros
    '--------------------------------
    Dim objcl_liste_macros As Workbook                  ' classeur  objet
    Dim Fl_liste_macros As String                       ' feuille   String
    Fl_liste_macros = "liste_macros"                    ' affectation   nom     feuille
    ' référencer classeur "macros_vba_excel.xls"
    Set objcl_liste_macros = Workbooks("macros_vba_excel.xls")
    ' initialisation contenu cellules (ce n'est pas suffisant mais ne connaît pas mieux)
    objcl_liste_macros.Sheets(Fl_liste_macros).Cells.ClearContents
    '------------------
    ' classeur à lister
    '------------------
    Dim objcl_cl_a_lister As Workbook                   ' classeur  objet
    Dim cl_cl_a_lister As String                        ' classeur  String      fullname
    Dim cl_cl_a_lister_open As Boolean                  ' classeur à lister déjà ouvert
     
    Dim ajout As Double                                 ' nb lignes totale des macros
    Dim xlUpdateLinksNever                              ' ouvrir sans les liens
    '
    Dim err_open As Boolean                             ' erreur ouverture classeur
    '
    ' dichier texte en sortie
    '
    Dim file2
    Dim fic2 As String
    file2 = FreeFile
    fic2 = "G:\informatique\programmation\VBA excel\vbproject\20091219_liste_des_macros_mouchard.txt"
    Open fic2 For Output As file2
    '------------------------
    ajout = 0                                           ' init compteur des lignes macros
    '---------------------------------------------------------------------------------------------
    ' parcourir la liste des classeurs à lister
    '---------------------------------------------------------------------------------------------
    i = 1
    '------------------------------- boucle sur les classeurs -------------------------------------
    While objcl_liste_macros.Sheets("liste_classeurs").Cells(i, 1) <> ""
        '--------------------------- boucle sur un classeur ---------------------------------------
        err_open = False                                ' init erreur ouverture à faux
        cl_cl_a_lister_open = False                     ' init classeur à lister ouvert à faux
        'affectation fullname du classeur à lister
        cl_cl_a_lister = objcl_liste_macros.Sheets("liste_classeurs").Cells(i, 1)
     
        ' regarder les classeurs ouverts pour ne pas confondre les cas d'erreurs d'ouverture
        ' de classeurs déjà ouvert avec des classeurs qui auraient divers problèmes d'ouverture
        ' qu'on ne saurait pas distinguer
        If Not IsOuvert(cl_cl_a_lister, nb_cls_ouverts, t_cls_ouverts, cl_ouvert) Then
     
            On Error Resume Next                        ' traiter cas erreur
            ' ouverture classeur à lister sans mise à jour des liens
            Set objcl_cl_a_lister = Workbooks.Open(cl_cl_a_lister, UpdateLinks:=xlUpdateLinksNever)                                                        ' => activation automatique ?
            If Err > 0 Then                             ' erreur ouverture
                MsgBox "Erreur " & Err & " / problème ouverture fr " & cl_cl_a_lister
                Print #file2, "Erreur " & Err & " / problème ouverture fr " & cl_cl_a_lister
                err_open = True
                Err.Clear
            End If
     
        Else
            Set objcl_cl_a_lister = Workbooks(Right(cl_cl_a_lister, _
            InStr(StrReverse(cl_cl_a_lister), "\") - 1))
            objcl_cl_a_lister.Activate
            cl_cl_a_lister_open = True                  ' init classeur à lister déja ouvert à vrai
        End If
        objcl_liste_macros.Sheets("liste_macros").Cells(i, 1) = _
        objcl_liste_macros.Sheets("liste_classeurs").Cells(i, 1)
     
        If Not err_open Then                            ' fermer le classeur
            If Not cl_cl_a_lister_open Then             ' s'il n'était pas ouvert
                ActiveWorkbook.Close False              ' fermeture
                Set objcl_cl_a_lister = Nothing         ' libérer la ressource
            End If
        End If
        i = i + 1
        '--------------------------- fin boucle sur un classeur -------------------------------------
    Wend
    '------------------------------- fin boucle sur les classeurs -----------------------------------
    Close file2
    End Sub
    Public Function IsOuvert(cl_a_lister, nb_cls_ouverts, ByRef t_cls_ouverts() As String, cl_ouvert) As Boolean
    Dim i As Integer
    IsOuvert = False
    For i = 1 To nb_cls_ouverts
        If cl_a_lister = t_cls_ouverts(i) Then
            IsOuvert = True
            Exit For
        End If
    Next i
    End Function

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Je crois même que dans mon cas il y a moyen de faire plus simple .

    Tout ce qui me faudrais c'est de trouver la valeur de la cellule a gauche et la passé a ma macro ... et de réussir a appeler ma macro sans devoir utiliser outils..macro etc..


    Bref que dans ma ligne disont

    Nom_entreprise | 000001 | Ouvrir

    Le fait d'appuyer sur Ouvrir , lance ma macro avec comme parametre 00001
    et ouvrir donc le classeur 000001.xml et la feuille 'X' .. puisque j'ouvre toujours la même feuille avec le même nom, sa devrais pas être trop trop sorcier... du moins j'espère.

    Et finalement ma fonction de suppression d'une feuille demande toujours une confirmation de type '' Les feuilles sélectionnées peuvent contenir des données. (...) '' , es-ce qu'il y a moyen de byPasser cette validation .. Je voudrais que ce soit invisible a l'utilisateur.

    Encore une fois un gros merci ! et désolé du retard sur le feedback ... Congé de noël

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 27
    Points : 29
    Points
    29
    Par défaut Jonathan je t'invite à une recherche personnelle
    Bonsoir ,
    J'ai bien reçu ton message privé et y répondrai sous peu.
    Je débute aussi en VBA Excel, pas en informatique, et j'ai pris la bonne habitude de chercher et rechercher et rechercher encore.

    Sur ton dernier message de ce forum j'ai fait une recherche sur "VBA Excel évènement feuille" , comme le suggère ton énoncé. Tout de suite je tombe sur l'excellent et connu

    je te joins copie du code qui s'y trouve. Placer ce code à l'aide de l'éditeur VBA dans "Feuil1" :
    1) Cliquer sur feuil1,
    2) dans la partie code, en haut, onglet gauche initialisé à "General" choisir "Worksheet" ce qui libère une liste de procédures dans l'onglet droit
    3) choisir BeforeRightClick et cliquer dessus ce qui produit le squelette de la procédure ci-après que tu complètes avec les autres lignes de la dite procédure
    Je trouve merveilleux le résultat qui utilise uniquement la puissance de VBA Excel et le savoir de silkyroad.
    Voilà ton premier point de réglé et je n'en connaissais pas plus que toi.

    Je veux te sensibiliser à ne pas prendre les forums pour des centres de formation, je crois que c'est mal perçu. En effet, il y a des individus dont c'est le boulot (ce n'est pas mon cas) alors il faut s' adresser à eux pour une initiation sur le fond.
    Il me semble que le forum doit être réservé pour des difficultés sur un sujet que l'on pratique et non pas demander sur un sujet que l'on ne veut pas pratiquer et en quelque sorte prendre les autres pour ses "nègres".
    ça ne veut pas dire que je veux pas t'aider, je te prodigue juste quelques rudiments de formation humaine.

    A +
    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
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As Byte
    Dim oAnime As Balloon
    Cancel = True
    Assistant.Move 400, 500
    Assistant.On = True
    Set oAnime = Assistant.NewBalloon
    With oAnime
    .Animation = msoAnimationEmptyTrash
    .Button = msoButtonSetOK
    .Heading = "Ceci est un message personnalisé."
    .Text = "Sélectionnez une option dans la liste ci dessous:"
    .CheckBoxes(1).Text = "VB"
    .CheckBoxes(2).Text = "VBA"
    .CheckBoxes(3).Text = "ACCESS"
    .Show
    For i = 1 To 3
    If .CheckBoxes(i).Checked = True Then
    Select Case i
    Case 1
    Target = .CheckBoxes(1).Text
    Case 2
    Target = .CheckBoxes(2).Text
    Case 3
    Target = .CheckBoxes(3).Text
    End Select
    Exit For
    End If
    Next i
    End With
    End Sub

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    C'est une drôle de réponse , en faite je ne prends personne comme un esclave et je n'ai jamais demandé de code mais plutôt des pistes de solutions.

    Je dois admettre qu'en faite les codes qui m'ont été fournit dans cette discussion ne répondent pas du tout à mes besoins , quoi qu'il est en effet difficile d'exprimer mes besoins ici.

    Quoi qu'il en sort je te remercit tout de même pour ton aide , j'ai quasiment terminé le projet d'origine .... surtout grâce a ce bon ami appelé google .

Discussions similaires

  1. Modification dans une bdd via une liste choisie via une checkbox
    Par LuffyWinchester dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/03/2015, 15h41
  2. Réponses: 1
    Dernier message: 03/10/2014, 19h40
  3. Réponses: 9
    Dernier message: 26/05/2014, 17h55
  4. Importer une feuille excel d'un autre fichier excell
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/12/2006, 21h53
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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