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 choix de la plage à importer [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Finance
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Finance
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut VBA choix de la plage à importer
    Bonjour à tous,

    J'ai fait un module afin d'automatiser l'import d'une base de données. Cependant, cette base change tous les mois, c'est-à-dire qu'il peut y avoir des lignes supplémentaires ou inversement.

    J'aimerai donc pouvoir ouvrir le fichier à sélectionner, choisir la plage à importer et que la macro puisse continuer à tourner.

    Je vous ai mis la macro juste en dessous, comme vous pouvez le voir le copier/coller se fait en fonction des cellules visibles uniquement, je souhaiterai donc qu'après avoir sélectionner la plage manuellement, l'utilisateur clique sur ENTER et la macro continue de fonctionner automatiquement.

    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
    Sub ImportDIE()
    '
    ' Import
    ' Importer base de données DI Eurose
    '
    ' 
     
     
    'Lancer cette macro en premier juste après la base obligation car l'ajout dans cette base est spécialement conçu pour être lancé en premier
     
    Dim MonFichier
     
    MonFichier = Application.GetOpenFilename("Fichiers Excel avec macro (*.xlsm),*.xlsm")
     
    MsgBox ("Selectionner la plage à importer puis cliquer sur ENTER")
     
     
        Windows("Archive DNC.xlsm").Activate
        Range("B6:AU187").Select 'nombre de ligne peut varier
        Selection.SpecialCells(xlCellTypeVisible).Select
        Selection.Copy
        Windows("template import données obligataires infocentre_20180430.xlsm"). _
            Activate
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Base DIE"
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("A1").Select
     
    End Sub
    Après l'ouverture de la message box je ne sais pas quelle ligne écrire afin que l'utilisateur choissise la plage et clique sur enter !!


    Merci d'avance pour votre aide

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Pourquoi demandé à l'utilisateur ?

    Si Excel peut le faire tout seul !!!

    avec cette instruction, Excel sélectionne automatiquement la zone active (jusqu'à trouver une ligne, colonne entièrement vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B6").CurrentRegion.Select
    Après, plutôt que de faire çà avec du code, tu peut envisager d'utiliser une "Connexion" via ms query par exemple.
    va voir là si tu veux en savoir plus
    https://www.developpez.net/forums/d1...riel-ms-query/

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    après avoir sélectionner la plage manuellement
    ---->> rubrique Application.InputBox, méthode de l'aide interne VBA. Elle est assortie d'un exemple.
    Si tu tiens à ce que l'utilisateur choisisse manuellement -->> A lire et utiliser.

  4. #4
    Membre régulier
    Femme Profil pro
    Finance
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Finance
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut
    Merci beaucoup pour ton aide Jérôme


    Le problème est qu'il y a des lignes vides dans la plage à sélectionner. Les macros suivantes nettoient justement la base de données. Je souhaite que la personne qui va utiliser ma macro (ce que j'entend par utilisateur :p) puisse lui-même sélectionner la plage !

  5. #5
    Membre régulier
    Femme Profil pro
    Finance
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Finance
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut
    Merci beaucoup Unparia, c'est exactement ce qu'il me fallait !

    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
    Sub ImportDIS()
    '
    ' ImportDISerenite 
    '
    Dim MonFichier As Variant
     
    MonFichier = Application.GetOpenFilename("Fichiers Excel avec macro (*.xlsm),*.xlsm")
     
    Workbooks.OpenXML Filename:=MonFichier
     
    Set myCell = Application.InputBox( _
    prompt:="Select a cell", Type:=8)
     
            Selection.SpecialCells(xlCellTypeVisible).Select
            Selection.Copy
     
    Windows("template import données obligataires infocentre_20180430.xlsm"). _
            Activate
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Base DIS +"
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Range("A1").Select
     
    End Sub
    Cependant, dernier problème, quand je lance la macro, lorsque je sélectionne ma plage et qu'elle se copie/colle sur mon fichier active, la sélection ne prend pas en compte la sélection des cellules visibles uniquement et prend également en compte des lignes au dessus alors que je les ai pas selectionnées....

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce n'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.SpecialCells(xlCellTypeVisible).Select
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mycell.SpecialCells(xlCellTypeVisible).Select
    qu'il est préférable d'écrire, déjà.

    Par ailleurs : les "lignes au-dessus" ne sont prises en compte que parce-que tu les as sélectionnées lors de l'inputbox !

  7. #7
    Membre régulier
    Femme Profil pro
    Finance
    Inscrit en
    Juin 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Finance
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2018
    Messages : 7
    Par défaut
    Oui en effet, lorsque j'ouvrais le fichier toute la base était sélectionnée j'ai donc arrangé ça

    J'ai en effet modifié cette ligne, est ce que cela veut dire que pour coller, sur la ligne
    je mets mycell devant PasteSpecial ? J'ai essayé et on me dit que cette méthode ne fonctionne pas

    J'ai beau cherché sur d'anciens postes sur des forums et me creuser la tête mais j'ai du mal à trouver le langage exacte pour effectuer cette manip....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set mycell = Application.InputBox( _
    prompt:="Sélectionner la plage:", Type:=8)
     
    mycell.SpecialCells(xlCellTypeVisible).Select
    mycell.Copy ActiveCell
    Windows("template import données obligataires infocentre_20180430.xlsm"). _
            Activate
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Name = "Base DI Eurose"
    Range("A1").Select
    mycell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Range("A1").Select
    Merci encore pour votre aide

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Que vient faire dans cela :
    mycell est DEJA un objet range : celui à copier
    regarde cet exemple et inspire-toi de lui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set mycell = Application.InputBox(prompt:="Select a cell", Type:=8)
    mycell.SpecialCells(xlCellTypeVisible).Copy
    Worksheets("Feuil3").Range("J1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Je te laisse maintenant là, si tu permets.

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

Discussions similaires

  1. Trier une plage de cellules
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/12/2019, 13h04
  2. [VBA-*] Choix de l'imprimante par l'utilisateur
    Par pjthedj dans le forum Général VBA
    Réponses: 12
    Dernier message: 14/09/2015, 05h16
  3. [VBA] choix valeur liste déroulante (champ texte d'1 table)
    Par Lou Pitchoun dans le forum Access
    Réponses: 14
    Dernier message: 22/02/2006, 10h27
  4. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 17h04
  5. [VBA-E] Fixer une plage ?
    Par Zaal dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/04/2004, 08h48

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