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 :

VBA Choisir un fichier Excel et importer des données dans un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 18
    Points : 14
    Points
    14
    Par défaut VBA Choisir un fichier Excel et importer des données dans un autre fichier
    Bonjour à tous,
    J'ai créer un code en VBA qui me permet de copier des données d'un fichier Excel (ici Fichier1) pour les coller dans un autre fichier Excel (mon fichier actif avec mon code VBA).

    J'aimerais faire deux modification :

    1) Ce serai de pouvoir choisir mon fichier Excel. C'est à dire ouvrir une boite qui me permettrait de choisir un fichier Excel et non devoir changer à chaque fois mon chemin dans le code.

    2) Et ici je sélectionne 2 colonnes C et D que je copy/colle. Je voudrais aussi sélectionner la colonne M, pour la copy/colle aussi mais je n'y arrive pas comme elles ne sont pas à coté.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Choix_du_Fichier()
     
    Dim Source As Workbook
     
    Set Source = Workbooks.Open("C:\Fichier1.xlsx")
     
        With Workbooks("Fichier1.xlsx").Worksheets("feuille1").Range("C12:D800").Copy
        End With
     
    Range("A1:B800").PasteSpecial
    Workbooks("Fichier1.xlsx").Close False
     
    End Sub
    Merci à vous par avance pour votre aide.

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour répondre à ton 1)

    il te faut utiliser les filesDialog.

    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
       'ouverture d'un fichier par boite FileDialog
    '********************************************************************************
        'Declaration d'une variable comme objet FileDialog
        Dim fd As FileDialog
     
        'Creation d'un objet FileDialog comme un File Picker dialog box.
        Set fd = Application.FileDialog(msoFileDialogFilePicker)
     
        'Déclaration d'une variable contenant le "path" de style variant
        Dim vrtSelectedItem As Variant 'obligatoirement de type variant
     
        With fd
     
            'donner le Path initial lors de l'affichage de la boite filedialog.
            'Cela permet d'arriver directement sur le repertoire addéquat
            .InitialFileName = "D:\Travail_tempo\Tuc\Machin\Bidule\"
            ' Cela peut être une adresse réseau comme : = "\\ReseauA\........................."       
     
           'Utilisation de la méthode show pour afficher le File Picker de la boite de dialogue et
            '   retourne la valeur de l'action de utilisateur.
            If .Show = -1 Then
     
                'pour le cas d'une selection multiple, selection de chacundans la collection FileDialogSelectedItems .
                For Each vrtSelectedItem In .SelectedItems
     
                    'vrtSelectedItem est un String contenant le "path"  de chaque item selectionné.
                    'affichage du "PATH et du fichier selectionné" dans une boite message
                    'MsgBox "Vous avez sélectionné : " & vrtSelectedItem
                    file_select = vrtSelectedItem
                Next vrtSelectedItem
     
            'Au cas où l'utilisateur appuis sur Cancel...
            Else
                'Dans ce programme je ne fais rien.
            End If
        End With
     
        'Pour le cas rien.
        Set fd = Nothing
     
    '**********************************************************************************
        Workbooks.Open file_select
    voilà dans "file_select" tu as l'adresse de ton fichier

    Tu me dis si cela te convient bien

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Oui merci Igloobel, ton code m'a bien aidé.

    J'aurais une autre question.
    J'ai réussi à faire un code pour récupérer un fichier Excel et sélectionner mes colonnes à partir de la ligne 15.

    Mais je voudrais maintenant que ma sélection de colonne commence lorsque la case C contient soit la lettre "C" soit "A". Et copier donc les colonnes D et M qui correspondent.

    Je vous met mon code ci-dessous.

    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
    Sub Choix_du_Fichier()
     
    Dim FichierSource As Variant
     
    Dim Source As Workbook
    Dim Cible As Worksheet
     
        On Error GoTo Fin
     
        Set Cible = Sheets("Fin de Travaux réalisés")
        FichierSource = Application.GetOpenFilename("Fichiers (*.xlsx),*.xlsx")
     
        If FichierSource = False Then GoTo Fin
     
        Application.ScreenUpdating = False
        Set Source = Workbooks.Open(FichierSource)
        With Source
             .Sheets("Fin de Travaux réalisés").Range("C15:D800,M15:M800").Copy Destination:=Cible.Range("A1")
             .Close False
        End With
        Application.ScreenUpdating = True
     
        MsgBox "Fin de l'import !"
        GoTo Fin
     
    Fin:
     
        Application.ScreenUpdating = True
     
        Set Cible = Nothing
        Set Source = Nothing
     
    End Sub
    Si quelqu'un à une idée ça fait un petit moment que je cherche. Merci à vous.

  4. #4
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mia30 Voir le message
    2) Et ici je sélectionne 2 colonnes C et D que je copy/colle. Je voudrais aussi sélectionner la colonne M, pour la copy/colle aussi mais je n'y arrive pas comme elles ne sont pas à coté...
    Perso j'utilise les outils à ma disposition tant que je peux. Voici donc le code de l'enregistreur de macro légèrement optimisé qui fait ce que tu demandes dans ton 2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro1()
        Sheets("Feuil3").Select
        Range("C:D,M:M").Copy
        Sheets("Feuil4").Select
        ActiveSheet.Paste
    End Sub
    Bien évidemment cela ne fait pas exactement ta demande puisque cela ne copie pas dans un autre fichier mais dans un autre onglet mais il suffit de l'adapter.

    C'est surtout la ligne 2 qui est importante. Elle te montre comment combiner les plages non contigües. Tout est dans les ":", ";" et ","

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    D'acc j'ai compris comment combiner les plages non contigües merci à toi.

    Mais j'ai une autre question.

    Je m'explique.
    Mon fichier avec la macro est vierge. Avec ma macro j'importe des donner d'un autre fichier Excel pour récupérer 3 colonnes (Colonnes C, D et M).

    Dans la colonne C, j'ai des lettres (Ex : A, C, F, K) et je voudrai sélectionner uniquement les lignes qui on un "A" ou un "K" dans le colonne C. Et prendre aussi les information qui sont dans les colonnes D et M.

    Est-ce possible ?

  6. #6
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mia30 Voir le message
    ...
    Mon fichier avec la macro est vierge. Avec ma macro j'importe des données d'un autre fichier Excel pour récupérer 3 colonnes (Colonnes C, D et M).
    Bon si je comprends bien tu es en train de me dire que systématiquement tu as un classeur Vierge et que tu vas y inclure ta macro... Ce n'est pas une bonne idée parce ton fichier sera un fichier XLSM et que si tu transmets ce fichier tu n'as pas à leurs donner la macro.

    Donc bien sûr il existe une bien meilleure idée.

    Je te conseille de faire un classeur de type XLAM ce type de classeur contient des macros personnelles, bien sûr il faut les intégrer aux compléments de ton excel (sur ton poste donc) mais après tu as les macros à dispositions quel que soit ton classeur ouvert du coup ton classeur vierge restera XLSX mais disposera des macros de ton XLAM. De plus ce fichier peut être sur un réseau (sauvegarde automatique). Et rien ne t'empêche rajouter d'autres macros au fur et à mesure.

    C'est ce que j'ai moi au travail.


    Citation Envoyé par Mia30 Voir le message
    ... Dans la colonne C, j'ai des lettres (Ex : A, C, F, K) et je voudrai sélectionner uniquement les lignes qui on un "A" ou un "K" dans le colonne C. Et prendre aussi les information qui sont dans les colonnes D et M.

    Est-ce possible ?
    Donc oui c'est possible, mais pour pouvoir être plus précis et voir quelle est la meilleure solution il faut que tu répondes à la mienne :
    Cela représente combien de lignes à traiter ?

  7. #7
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 101
    Points : 2 609
    Points
    2 609
    Par défaut
    Bonjour

    Avec Excel 365 je trouve ça dommage d'utiliser VBA pour récupérer des données d'une autre fichier Excel.
    C'est très simple avec Power Query dans le menu "Donnée"
    Voir par exemple le blog de Pierre : https://www.developpez.net/forums/bl...sseur-externe/
    En quelques clics c'est terminé.

    Stéphane

Discussions similaires

  1. Excel VBA - importer des données depuis un autre fichier excel
    Par katiar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/02/2016, 19h26
  2. [XL-2010] Importer des données dans un fichier excel
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/03/2015, 16h54
  3. [XL-2013] Importer des données dans un autre classeur
    Par titoupoulpe dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/12/2014, 14h11
  4. Réponses: 0
    Dernier message: 18/08/2010, 12h43
  5. importer des données d'un autre fichier excel
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/05/2008, 16h51

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