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 :

Ouvrir plusieurs classeurs à partit de mon USF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Educateur
    Inscrit en
    Avril 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Educateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 25
    Par défaut Ouvrir plusieurs classeurs à partit de mon USF
    Bonjour à tous,
    je demande votre aide car je ne me retrouve pas du tout. J'aimerais savoir s'il est possible à partir de mon Userform d'ouvrir un autre classeur et récupérer ou envoyer des données?
    Merci à tous de m'aider.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il suffit de mettre dans la partie adéquate de ton USF une macro utilisant la méthode Open de la collection Workbooks.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open "Monfichier.xls"

  3. #3
    Membre averti
    Homme Profil pro
    Educateur
    Inscrit en
    Avril 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Educateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 25
    Par défaut Salut Menhir
    Salut Menhir,
    tous mes respects à toi. Sauf erreur de ma part, j'ai mis le code que tu m'a communiqué sur un bouton de sort sorte à ouvrir l'autre classeur mais sa n'a pas marché. Surement que je me trompe.
    Dans mon Userform, il a un formulaire qui contient:

    - Nom
    - Prénoms
    - Date de naissance
    - Lieu de naissance

    après ces informations je souhaiterais cliquer sur un bouton (qui ferme Userform1 et ouvre Userform2) de sorte à ouvrir un autre classeur et entrer les informations suivantes:
    - Pays
    - Ville
    - BP
    - Contact

    Grand merci à toi de m'assister

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Bonjour Vitalus,

    Je pense que tu n'as pas bien renseigné le lien vers le fichier, il ne faut pas simplement écrire son nom mais tout son chemin... Il serait également préférable de lui donner un nom pour que la suite soit bien plus aisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim wb as WorkBook
    Dim Nom as String
    Nom = "Dupont"
    Application.DisplayAlerts = False 'Ceci va bloquer les éventuelles fenêtres de notification à l'ouverture du fichier
     
    Set wb = Workbooks.Open("C:\.....\tonfichier.xls") 'tu ouvres ton fichier et lui donnes le nom "wb", ensuite, rien de plus simple
     
    'Pour écrire "Dupont" (donc le Nom) en "C5" dans la 3ème feuille :
     
    wb.Sheets(3).Range("C5").value = Nom 
     
    Application.DisplayAlerts = True
    Après, pour transférer l'information de ce qu'est wb entre le UserForm1 et le UserForm2, tu peux passer par une variable publique, je pense... :

    tout en haut du code de ton UserForm1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public wb as WorkBook '(à la place du Dim écrit dans le message précédent)
    Tu places cela également dans ton UserForm2 ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public wb as Workbook
     
    Private Sub UserForm_Initialize()
     
    'ici, tu précises que la variable wb du UserForm2 correspond à la variable wb définie dans le UserForm1
    Set wb = UserForm1.wb
     
    ...
     
    End Sub
    Dis-moi si ça te va

    Quentin

  5. #5
    Membre averti
    Homme Profil pro
    Educateur
    Inscrit en
    Avril 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Educateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 25
    Par défaut Salut Quentin
    Salut QUENTIN,
    je ne crois pas avoir bien compris tes conseils. Je m'en excuse pour cela. Je vais joindre mon doc pour que tu puisse mieux apprécier ce que j'ai fais. Je crois que j'ai foiré.
    Mon premier fichier se nomme : TEST1 et le second: wb. Les deux fichier se trouvent sur mon bureau.
    Grand merci à toi de m'aider
    Fichiers attachés Fichiers attachés

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Bonjour Vitalus,

    J'espère avoir réussi à mieux expliquer ma solution ici

    NB : N'ayant pas ton 2ème fichier, je ne sais pas là où les infos doivent être écrites et donc le code ne fonctionnera pas comme tu le souhaites, mais je pense qu'avec ce que j'écris ci-dessous, tu devrais pouvoir le faire aisément toi-même !

    Remplace le contenu du code de ton USF1 par :

    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
    Option Explicit
    Public FichierCible As Workbook
    Public FichierOrigine As Workbook
     
    Private Sub CommandButton1_Click()
    Dim derlign As Integer
    With FichierOrigine.Sheets("Feuil1")
    derlign = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & derlign).Value = Me.TextBox1.Value
    .Range("B" & derlign).Value = Me.TextBox2.Value
    .Range("C" & derlign).Value = Me.TextBox3.Value
     
    'classement par ordre alphabétique
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range("A1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
        With FichierOrigine.Sheets("Feuil1").Sort
            .SetRange Range("A2:C100" & derlign)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Unload Me
    UserForm1.Show
    End Sub
     
    Private Sub CommandButton2_Click()
    Unload Me
    UserForm1.Show
    End Sub
     
    Private Sub CommandButton4_Click()
     
    Call OuvrirFichier
     
    If FichierCible Is Nothing Then Exit Sub
     
    Unload Me
    UserForm2.Show
     
    End Sub
     
    Sub OuvrirFichier()
     
    Dim Chemin As String
     
    'Objectif : Sélectionner un fichier (celui dont tu parles avec Pays, Ville...)
    'Ce Fichier, un classeur Excel, on l'appellera FichierCible (voir la déclaration tout en haut du code)
    'On va commencer par aller chercher le fichier voulu :
     
    With Application.FileDialog(msoFileDialogFilePicker) 'on utilise la boîte de dialogue pour chercher des fichiers
        .AllowMultiSelect = False 'Un seul fichier à ouvrir à la fois
        .InitialFileName = ActiveWorkbook.Path 'la recherche commencera au niveau du classeur actif
        .Filters.Add "Classeurs Excels", "*.xls,*.xls?", 1 'on force les formats xls et tous les xlsx, xlsm...
        .Show 'afficher la fenêtre de recherche
        If .SelectedItems.Count = 0 Then
            MsgBox "Aucun fichier choisi...", vbExclamation, "Impossible de continuer"
            Exit Sub
        Else
            Chemin = .SelectedItems(1) 'quand tu fermeras cette fenêtre, le chemin du fichier à ouvrir sera
        End If
     
    End With
     
    Application.DisplayAlerts = False
    Set FichierCible = Workbooks.Open(Chemin)
    Application.DisplayAlerts = True
     
    'Une variable objet (FichierCible) a été créée, elle est associée au fichier que tu as sélectionné
    'à partir de maintenant, pour travailler dans ce classeur Excel, il suffit de commencer par FichierCible.
    'par exemple : FichierCible.Sheets(1).range("A5:C8").Interior.Color = vbBlue
     
     
    End Sub
     
     
     
    Private Sub UserForm_Initialize()
        Set FichierOrigine = ActiveWorkbook
        'on va par la suite naviguer entre 2 classeurs, il est important de spécifier dans lequel on travaille
        'car par défaut, Sheets(3) signifie ActiveWorkBook.Sheets(3), donc si le classeur actif n'est plus celui d'origine
        'alors tout se mélangera... Exactement comme 'Range("C5")' écrira dans la feuille active, il faut spécifier la feuille si tu ne parles pas de celle-la
        'il vaut donc bien mieux stocker le classeur actif sous un nom, ici FichierOrigine
    End Sub

    Et celui de ton USF2 par :

    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
    Option Explicit
    Public FichierCible As Workbook
    Public FichierOrigine As Workbook
     
    Private Sub UserForm_Initialize()
     
    'la variable objet FichierCible est associée au UserForm1, on la duplique ici pour que ce soit plus simple à gérer
    'On aurait pu changer le nom, cela n'a pas d'importance. Nota : on l'a déclarée en haut également
    Set FichierCible = UserForm1.FichierCible
     
    'idem pour le FichierOrigine
    Set FichierOrigine = UserForm1.FichierOrigine
     
    'Au passage, sache que tant que tu n'as pas déchargé (unload) le UserForm1, tu peux aller chercher toutes les valeurs de ses contrôles
    'exemple :
    'MsgBox UserForm1.TextBox1.Text
     
    'Il est très important de spécifier dans quel fichier on travaille lorsque l'on écrit par exemple FichierOrigine.Sheets(1)... car
    'Sheets(1).Select sélectionnerait la feuille 1 du classeur actif (qui n'est plus forcément celui d'origine...)
     
    End Sub
     
    Private Sub CommandButton1_Click()
     
        'Je ne sais pas où tu veux lire / écrire des informations dans le FichierCible
     
    'Mais si tu veux écrire le contenu de la TextBox4 dans la cellule A1 la première feuille du classeur cible :
     
    FichierCible.Sheets(1).Range("A1").Value = TextBox4.Text
     
    'Ainsi, si tu veux afficher en msgbox le contenu de la cellule J8 de la 3ème feuille du classeur cible :
    MsgBox FichierCible.Sheets(3).Cells(8, "J").Text
     
    'etc...
     
    End Sub
    Quentin

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

Discussions similaires

  1. Ouvrir plusieurs classeurs Excel dans un seul processus
    Par zoopsys dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/12/2008, 18h27
  2. Mémoriser les saisies de mon USF dans mon classeur
    Par etorria dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2008, 22h59
  3. Réponses: 28
    Dernier message: 22/05/2006, 17h25
  4. Réponses: 14
    Dernier message: 06/04/2006, 16h48

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