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 :

Macro copier coller d'une plage dans un nouveau fichier Excel sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Finance
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Finance

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Macro copier coller d'une plage dans un nouveau fichier Excel sous condition
    Bonjour

    je suis débutant en macro et je voudrais pouvoir lancer une macro qui permettrait de copier/coller une plage excel dans un nouveau fichier dès lors que jai un changement de valeur dans une colonne cf exemple ci-dessous :

    En gros dès lors que la valeur age est différente de la suivante : D8 <> de D9; alors je copie colle toute la plage avec un age égale à 13 dans un nouveau fichier excel; et ainsi de suite pour chaque valeur âge différente (voir ci-dessous nouveau fichier 1, nouveau fichier 2,....)


    	A	B	C	D	E	F	G	H	I
    1	Nom	Prénom	Sexe	Age		Nouveau fichier 1			
    2	Thomas	Nina	F	13		Nom	Prénom	Sexe	Age
    3	Soul	Tala	M	13		Thomas	Nina	F	13
    4	Debar	Steph	F	13		Soul	Tala	M	13
    5	Tche	Nicolas	M	13		Debar	Steph	F	13
    6	Thomas	Arnaud	M	13		Tche	Nicolas	M	13
    7	Thomas	Judith	F	13		Thomas	Arnaud	M	13
    8	Bievale	Fred	M	13		Thomas	Judith	F	13
    9	Gong	Xian	F	14		Bievale	Fred	M	13
    10	Bourry	Nadia	F	14					
    11	Galano	thierry	M	14		Nouveau fichier 2			
    12	Mours	Isa	F	14		Nom	Prénom	Sexe	Age
    13	Foxy	Brown	F	15		Gong	Xian	F	14
    14	Sina	Eliane	F	15		Bourry	Nadia	F	14
    15	Jano	Carl	M	15		Galano	thierry	M	14
    16	Bialek	Louis	M	15		Mours	Isa	F	14
    17									
    18									
    19						Nouveau fichier 3			
    20						Nom	Prénom	Sexe	Age
    21						Foxy	Brown	F	15
    22						Sina	Eliane	F	15
    23						Jano	Carl	M	15
    24						Bialek	Louis	M	15

    Merci de votre aide.

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    Un fichier joint faciliterait la compréhension.

    Cordialement.

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour lapagaille,

    Voici le code que je te propose :
    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
    Sub division()
    Dim cell_ori As Range
    Dim val As Integer
    Dim nom As String
     
    With Worksheets("Feuil2")
        Set cell_ori = .Range("D1")
        val = 2
     
        For i = 2 To .Columns(1).Find("*", , , , , xlPrevious).Row
            If cell_ori.Offset(i, 0) <> cell_ori.Offset(i - 1, 0) Then
                .Range("$A" & val & ":$D" & i).Copy
     
                nom = "Valeur " & cell_ori.Offset(i - 1, 0)
                create_wkb (nom)
     
                'Place le chemin où tu as sauvegardé ton fichier ici
                Workbooks.Open Filename:="C:\Users\...\Desktop\" & nom
                ActiveSheet.Paste Destination:=Worksheets(nom).Range("A2")
     
                ActiveWorkbook.Close True
     
                val = i + 1
            End If
        Next i
    End With
     
    End Sub
     
    Sub create_wkb(str As String)
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
     
        Set xlApp = CreateObject("Excel.Application")
        xlApp.SheetsInNewWorkbook = 1
     
        Set xlBook = xlApp.Workbooks.Add
        'Place le chemin de sauvegarde ici
        xlBook.SaveAs ("C:\Users\...\Desktop\" & str)
        xlApp.Visible = True
     
        Set xlSheet = xlBook.Worksheets(1)
        xlSheet.Name = str
        xlSheet.Range("A1") = "Nom"
        xlSheet.Range("B1") = "Prénom"
        xlSheet.Range("C1") = "Sexe"
        xlSheet.Range("D1") = "Age"
     
        xlBook.Close True
     
    End Sub
    Il y a surement mieux en terme de performance mais je pense que ça devrait convenir à ta demande - en espérant avoir compris celle-ci.

    N'hésite pas à me faire un retour.

    Cordialement,
    Kimy

    Petite rectification dans ma dernière macro :
    J'ai modifié cette ancienne ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To .Columns(1).Find("*", , , , , xlPrevious).Row - 2
    par celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To .Columns(1).Find("*", , , , , xlPrevious).Row
    Je ne prenais pas en compte la dernière itération.
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

Discussions similaires

  1. [XL-2007] Copier/coller d'une date dans la première cellule vide
    Par AntMi dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 01/07/2014, 15h31
  2. Macro copier coller d'une plage sur nouveau fichier excel sous condition
    Par lapagaille dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/02/2014, 13h11
  3. [XL-2007] automatisation copier coller d'une feuille dans une autre
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2010, 10h26
  4. Copier contenu d'une feuille dans un autre fichier
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2007, 18h01
  5. copier une feuille dans un nouveau doc excel
    Par alkmehd dans le forum Access
    Réponses: 1
    Dernier message: 24/09/2005, 11h01

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