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 : importer des données d'un classeur vers un autre classeur avec des conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Généraliste RH
    Inscrit en
    Mai 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Généraliste RH
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2022
    Messages : 3
    Par défaut VBA : importer des données d'un classeur vers un autre classeur avec des conditions
    Bonjour,

    Je suis débutant en VBA et je n'arrive pas trouver la solution.

    De coups, je voudrais copier uniquement les donnés ( inférieures à un an à partir d'aujourd'hui ) de la colonne "A" du "BASE DEBUT" dans la colonne "A" du "BASE FIN". Sans ouvrir la "BASE DEBUT".
    Et je voudrais éviter la créations des doublons à chaque exécution de macro.

    Je ne sais pas si cela est clair pour vous, c'est pour cela que je vous ai joint mes fichiers Excel.
    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    PowerQuery serait idéale, mais voici une solution simple en annexe
    BASE FIN.xlsx
    BASE DEBUT.xlsx

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Généraliste RH
    Inscrit en
    Mai 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Généraliste RH
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2022
    Messages : 3
    Par défaut
    Bonjour,
    J'ai enfin trouvé cette solution qui copie automatiquement les données dont j'ai besoin, mais la problème c'est que ça m'efface tout au lieu de simplement ajouter les nouvelles données.

    Comment puis-je simplement ajouter les données inexistantes ?


    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
    Option Explicit
     
    Sub RecupereDataFichier()
        'déclaration des variables
        Dim ListeFichier As Variant
        Dim MonClasseur As Workbook
        Dim BaseVBA As Worksheet
        Dim lstrw  As Long
        Dim lstcol As Long
        'identifier onglet
        Set BaseVBA = Worksheets("BASE VBA")
        'on désactive le presse-pappier et le raffraichissement de l'écran
        Application.CutCopyMode = False
        Application.ScreenUpdating = False
        'on récupere le fichier des donées a copier
        ListeFichier = Application.GetOpenFilename(Title:="Sélectionnez votre  classeur", _
                        filefilter:="Fichiers Excel(*.xls*),*.xls*", ButtonText:="Cliquez")
        'prévoir le cas du boutton Annuler
        If ListeFichier <> False Then
            'on affecte le fichier sélectionné
            Set MonClasseur = Application.Workbooks.Open(ListeFichier)
            'Matricule SP
            MonClasseur.Sheets(1).Range("G4:G" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("A3").PasteSpecial xlPasteValues
            'Identifiant
            MonClasseur.Sheets(1).Range("H4:H" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("B3").PasteSpecial xlPasteValues
            'Matricule
            MonClasseur.Sheets(1).Range("F4:F" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("C3").PasteSpecial xlPasteValues
            'Position act LA
            MonClasseur.Sheets(1).Range("J4:J" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("F3").PasteSpecial xlPasteValues
            'Nom
            MonClasseur.Sheets(1).Range("M4:M" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("G3").PasteSpecial xlPasteValues
            'Prénom
            MonClasseur.Sheets(1).Range("N4:N" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("H3").PasteSpecial xlPasteValues
            'Radiation des contrôles D
            MonClasseur.Sheets(1).Range("AF4:AF" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
            BaseVBA.Range("L3").PasteSpecial xlPasteValues
            'trier le tableau
            lstrw = BaseVBA.Cells(Rows.Count, 1).End(xlUp).Row
            lstcol = BaseVBA.Cells(2, Columns.Count).End(xlToLeft).Column
            BaseVBA.Range(BaseVBA.Cells(2, 2), BaseVBA.Cells(lstrw, lstcol)).Sort _
             key1:=BaseVBA.Range("L3"), order1:=xlAscending, Header:=xlYes
     
            'on désactive les message d'alerte de Microsoft
            Application.DisplayAlerts = False
            'on ferme le classeur source
            MonClasseur.Close
        End If
        'on ré-active le presse-pappier et le raffraichissement de l'écran
        Application.CutCopyMode = True
        Application.ScreenUpdating = True
    End Sub

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Forcément, car l'intruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonClasseur.Sheets(1).Range("G4:G" & Cells(Rows.Count, 1).End(xlUp).Row).Copy
    BaseVBA.Range("A3").PasteSpecial xlPasteValues
    dit qu'il faut copier la plage "G4:Gn" et coller ses valeurs dans BaseVBA.Range("A3")
    Donc tout ce qui se trouve en A3 et en dessous sera remplacé par les nouvelles valeurs.
    Si vous voulez coller les cellules copiées en fin de liste de la colonne A, il faudra repérer la dernière cellule libre; par exemple :
    La destination serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BaseVBA.Cells(Rows.Count,1).End(xlUp).Offset(0,1)
    en supposant que la colonne A ne contient pas de données autres que celles venant de la source.

Discussions similaires

  1. [phpMyAdmin] Importation de données d'une table vers une autre table ayant plus de colonnes
    Par patrmich dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 16/05/2014, 21h00
  2. [AC-2007] Importation de données d'une table vers une autre
    Par Manilla dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 20/06/2012, 13h48
  3. import de données d'une bdd vers une autre
    Par cedill23 dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/08/2009, 14h09
  4. [MySQL] Importer les données depuis une DB vers une autre
    Par mamiberkof dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/03/2007, 15h52
  5. Importation de données d'une base vers une autre
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2006, 16h03

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