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 création de classeur en fonction d'un nom + copie des bonnes données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 28
    Par défaut Macro création de classeur en fonction d'un nom + copie des bonnes données
    Bonjour à tous,

    Etant totalement novice en VBA, je suis complètement bloquée sur ce problème :

    J'ai un fichier de base dans lequel se trouve des noms de commerciaux + d'autres infos.
    il me faudrait une macro qui, en fonction de chaque nom, créera un nouveau classeur nommé du nom du commercial.
    Dans ce classeur se trouvera toutes les infos de la même ligne

    A savoir qu'un commercial peut apparaître plusieurs fois, dans ce cas il faudra regrouper les infos dans un même classeur

    Exemple :

    Paul martin France Telephone Info A
    Michel Machin France Telephone Info A
    Jean claude France Téléphone Info A
    Michel Machin France Telephone Info B
    Jean claude France Telephone Info B

    On aura au final 3 classeurs : Paul Martin, Michel Machin et Jean claude.
    Dans Michel Machin et Jean claude il y aura 2 lignes

    J’espère que c'est compréhensible et que vous pourrez m'aider...
    Merci d'avance

  2. #2
    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
    Salut

    Tu es novice à quel point ? Sais-tu ouvrir et utiliser l'éditeur VBA (ALt+F11 sur Excel) ?

    Sinon, ouvre-le (ALt+F11) et insère un module (insertion/module)

    Dans la zone de texte ainsi ouverte, tu pourras utiliser ces infos :

    Pour créer un classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim NvClasseur As Workbook 'tu déclares une variable de type Workbook
    Set NvClasseur = Workbooks.Add 'tu associe à cette variable un nouveau classeur (qui va s'ouvrir au passage)
    'Ensuite, pour l'exploiter : tu écris NvClasseur. et ça va te proposer toutes les "options" associées au classeur (le fermer, choisir une feuille, le sauver, le renommer...)
    'D'ailleurs, on veut le renommer :
    'NvClasseur.SaveAs "LeChemin\LeNouveauNom.Extension"
    NvClasseur.SaveAs "C:\...\Range("A1").Text & ".xls" 'par exemple
    Pour ouvrir un classeur existant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Classeur As Workbook 'tu déclares une variable de type Workbook
    Set Classeur = Workbooks.Open ("C:\toutlechemin\lenomdufichier.extension") 'le tout entre guillemets. Ainsi, tu associe à cette variable un nouveau classeur (qui va s'ouvrir au passage)
    'Ensuite, pour l'exploiter, pareil : tu écris Classeur.
    Pour écrire dans le classeur en question (ici on va prendre l'exemple de NvClasseur créé plus haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NvClasseur.Sheets(1).Range("A1").value = "Ici le texte ou la valeur que tu veux mettre"
    NvClasseur.Sheets("Feuil2").Delete 'si tu veux supprimer la feuille 2... il vaut mieux utiliser son "index" c'est à dire sa place dans le classeur, par défaut 2 pour la feuil2
    NvClasseur.Sheets(1).Range("A" & Rows.Count).End(xlUp).Offset(1,0).Value = "Ici la valeur à rajouter en dernier dans ta liste"
    Pour info, la fonction Range.End(xlUp) va partir de la Range précisée (donc d'une cellule Excel) et va aller dans la xlDirection specifiée et sélectionner la dernière pleine ou la prochaine pleine si tu pars d'une cellule vide...
    Offset(x,y) va décaler la range de x lignes et de y colonnes, donc Range("Adresse de ta dernière cellule du tableau en colonne A).End(xlUp).Offset(1,0) va partir de tout en bas, remonter jusqu'à la dernière cellule pleine voire la cellule A1 si aucune cellule n'est remplie, puis décaler d'une ligne vers le bas (offset) pour rajouter la valeur et non remplacer la dernière...

    Si tu veux utiliser les donnée de ton classeur source (ce que tu veux faire), relie-le aussi à une variable par ex "ClasseurPrincipal" ou "wbPrincipal"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim wbPrincipal As Workbook
    Set wbPrincipal = ActiveWorkbook
     
    Dim Classeur As Workbook
    Set Classeur = Workbooks.Open("C:\toutlechemin\lenomdufichier.extension") 'le chemin entre guillemets
     
    Classeur.Sheets(1).Range("A" & Rows.Count).End(xlUp).Offset(1,0).Value = wbPrincipal.Range("A1").Value
    Bon, je sais plus où j'en suis Regarde ces quelques informations et essaye de construire cela par toi-même ! En espérant que tu saches utiliser les boucles et tout, mais n'oublie pas que le but du forum n'est pas d'apporter une solution toute faite... C'est que l'on y arrive ensemble !

  3. #3
    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
    Tiens, je te propose une solution, car si tu es vraiment novice, tu vas galérer à la faire toi-même

    Prends le temps de la comprendre, ce n'est pas si compliqué (surtout que je t'ai donné des infos plus haut)...
    Par contre : elle n'est pas vraiment optimisée et si tu lances 2 fois ta macro, elle va remplir de nouveau les fichiers déjà créés... donc tu pourrais effacer les infos dans le fichier principal dès que la ligne est traitée pour éviter ça.

    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
    Sub MacroProposée()
     
    'on va changer le type d'extension par défaut pour que la macro fonctionne même
    'si tes réglages par défaut sont différents des miens :
    Dim TypeExtention As Integer
    TypeExtention = Application.DefaultSaveFormat
    Application.DefaultSaveFormat = 51 'pour avoir par défaut .xlsx
     
    'on dimensionne tout le bazar
     
    Dim wbPrincipal As Workbook
     
    Dim wbSecondaire As Workbook
    Dim cell As Range
    Dim Extension As String, NomFichier As String, CheminDossier As String, CheminFichier As String
     
    'On affecte les variables
    Set wbPrincipal = ActiveWorkbook
    Extension = ".xlsx"
    CheminDossier = "C:\Exemple\" 'Mets ici le chemin de ton dossier où tu veux créer les fichiers
     
    If Right(CheminDossier, 1) <> "\" And Right(CheminDossier, 1) <> "/" Then
        CheminDossier = CheminDossier & "\" 'cela mettra le \ si tu as oublié de le spécifier plus haut
    End If
     
    'On va 'scanner' la première colonne de ta liste. ELLE DOIT ETRE EN PREMIERE FEUILLE ET COMMENCER EN A1, sinon tu adaptes.
    For Each cell In wbPrincipal.Sheets(1).Range("A:A").SpecialCells(xlCellTypeConstants)
        NomFichier = Trim(cell.Text) 'la fonction Trim va supprimer les éventuels espaces au début et à la fin du contenu de la cellul
     
        CheminFichier = CheminDossier & NomFichier & Extension 'on construit le nom du fichier à partir des infos que l'on a 
     
        'ici on va vérifier si le fichier existe :
        'la fonction Dir(chemin) retourne le nom du fichier s'il existe, sinon ne retourne rien, donc des guillemets vides("") 
     
        Select Case Dir(CheminFichier)
            Case NomFichier & Extension 's'il a bien trouvé le fichier
                Set wbSecondaire = Workbooks.Open(CheminFichier)
            Case "" '(ou else ou vbnullstring) s'il n'a rien trouvé
                Set wbSecondaire = Workbooks.Add
                wbSecondaire.Sheets(1).Range("A1").Value = "Nom et prénom"
                wbSecondaire.Sheets(1).Range("B1").Value = "Pays"
                wbSecondaire.Sheets(1).Range("C1").Value = "Téléphone"
                wbSecondaire.Sheets(1).Range("D1").Value = "Info"
     
                wbSecondaire.SaveAs CheminFichier
        End Select
     
        'Peu importe qu'on l'ait créé maintenant ou juste ouvert, on rajoute une ligne :
        With wbSecondaire.Sheets(1).Range("A" & Rows.Count).End(xlUp)
            .Offset(1, 0).Value = cell.Value
            .Offset(1, 1).Value = cell.Offset(0, 1).Value
            .Offset(1, 2).Value = cell.Offset(0, 2).Value
            .Offset(1, 3).Value = cell.Offset(0, 3).Value
        End With
     
        wbSecondaire.Save
        wbSecondaire.Close SaveChanges = True 'Dans tous les cas on le ferme et on sauvegarde les modifs
     
        Set wbSecondaire = Nothing 'facultatif : on vide la variable objet
     
    Next cell
     
    Application.DefaultSaveFormat = TypeExtension 'on remet ce réglage comme avant la macro
     
    End Sub
    Dis-moi si tu as un souci

    PS : Je ne sais pas trop pourquoi mais le savechanges = true ne fonctionnait pas chez moi ce coup-ci Donc j'ai fait un .Save juste avant, ça fait répétition mais ça fonctionnera à coup sûr !

    Quentin

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 28
    Par défaut
    Bonjour Quentin,

    Un grand merci pour ton aide!
    Je n'aurais jamais réussi la deuxième partie je pense, je vais maintenant essayer de comprendre ton code

    Sinon, voici ce que j'avais réussi à faire :

    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
     
     
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
     
    'création du fichier customer
     
        'On créer l'objet Excel
        Set xlApp = CreateObject("Excel.Application")
        'On défini le nombre d'onglets 
        xlApp.SheetsInNewWorkbook = 1
        'On ajoute un classeur
        Set xlBook = xlApp.Workbooks.Add
        'On donne un nom au classeur
        xlBook.SaveAs ( "C:\macro\customer-1.xlsx")
        'On rend le classeur visible
        xlApp.Visible = True
        'On créer l'objet onglet dans le nouveau classeur créé
        Set xlSheet = xlBook.Worksheets(1)
        'On ferme l'application
        xlApp.Quit
     
    Workbooks.Open "C:\macro\customer-1.xlsx"
     
    Do While (ThisWorkbook.Sheets(3).Range("A1") <> "")
    ThisWorkbook.Sheets(3).Range("C1").Copy
    Workbooks("customer-1.xlsx").Activate
    Workbooks("customer-1.xlsx").Sheets(1).Range("N2").Select
    Workbooks("customer-1.xlsx").Sheets(1).Paste
     
    Loop
    En m'étant grandement inspiré d'internet

    J'essaye de comprendre le code, je le test et reviens vers toi en cas de probleme, mais encore une fois, un grand MERCI

  5. #5
    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
    En fait, dans ce que j'ai écrit, les infos doivent être en colonne A de la feuille 5, donc si tu as des entêtes ça va les prendre en compte, si tu veux tu peux réduire la range du "For Each Cell In...)

    N'hésite pas à poser des questions si tu ne comprends pas

    Au passage, le code que je t'ai proposé ne parle pas d'application car... tu lances la macro depuis Excel donc tu parles forcément de l'application Excel (un peu comme tu précises pas ActiveWorkbook.ActiveSheet.Range("A1") mais simplement Range("A1")... tu vas plutôt préciser dans le cas où tu ne travailles pas dans la feuille active, le classeur actif ou comme toi : l'application.

    Après, un autre point à simplifier : pour copier coller, tu peux également faire (y compris dans mon exemple, n'hésite pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Pour copier la range ("A5:D5") du wb1 au niveau de "A1" du wb2 :
    wb1.Sheets(1).Range("A5:D5").Copy Destination:=wb2.Sheets(1).Range("A1")
    'Après, à toi de l'adapter :) Cela va copier l'intégralité de la range, y compris le format, commentaires et tout.
    Moi, ce que je t'avais proposé n'écrivait que le contenu, et évitait le passage d'un classeur à l'autre, ce qui donne la gerbe :p
    D'ailleurs, pour éviter cette gerbe (et souvent accélérer les macros), tu peux également faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.ScreenUpdating = False
    'ton code
    Application.ScreenUpdating = True
    Bon, après... un bon point pour toi : j'ai l'habitude de faire mon baratin avec par exemple wbPrincipal, mais tu peux bien sûr passer par ThisWorkBook sans avoir besoin de le déclarer (donc comme tu as fait). C'est historique dans mon cas, lol. J'ai appris en autodidacte et j'ai certaines mauvaises habitudes :p

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 28
    Par défaut
    Citation Envoyé par Quentin77170 Voir le message
    En fait, dans ce que j'ai écrit, les infos doivent être en colonne A de la feuille 5, donc si tu as des entêtes ça va les prendre en compte, si tu veux tu peux réduire la range du "For Each Cell In...)
    De la feuille 1 plutôt non?


    Moi, ce que je t'avais proposé n'écrivait que le contenu, et évitait le passage d'un classeur à l'autre, ce qui donne la gerbe :p
    D'ailleurs, pour éviter cette gerbe (et souvent accélérer les macros), tu peux également faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.ScreenUpdating = False
    'ton code
    Application.ScreenUpdating = True
    Ici, je n'ai pas compris ce que tu me dis, c'est pour cacher ce que fais la macro c'est ça? éviter de voir les écrans qui s'ouvre et qui se ferme?

    Bon, après... un bon point pour toi : j'ai l'habitude de faire mon baratin avec par exemple wbPrincipal, mais tu peux bien sûr passer par ThisWorkBook sans avoir besoin de le déclarer (donc comme tu as fait). C'est historique dans mon cas, lol. J'ai appris en autodidacte et j'ai certaines mauvaises habitudes :p
    ça m'évitait d'ajouter une variable en plus, mais c'est peut-être plus propre comme tu le fais?

    Bon, j'ai essayé d'adapter ton code, sur le tableau d'exemple il fonctionne très bien, sur mon code, c'est moyen x) il créé bien les fichiers, avec les bon noms, MAIS, il ne copie pas les bonnes données en face, il ne reprend que la première ligne pour toutes les personnes.

    Par rapport à mon exemple, dans tous les classeurs que ce soit Paul, Michel ou Jean Claude, je n'ai que les données de Paul dans les 3 classeurs

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Sub MacroProposée()
     
    ligne1 = 1
        ligne2 = 2
        ligne3 = 3
        ligne4 = 4
        ligne5 = 5
        ligne6 = 6
        ligne7 = 7
        ligne8 = 8
        ligne9 = 9
        ligne10 = 10
        ligne11 = 11
        ligne12 = 12
        ligne13 = 13
        ligne14 = 14
        inc = 4
     
    'on va changer le type d'extension par défaut pour que la macro fonctionne même
    'si tes réglages par défaut sont différents des miens :
    Dim TypeExtention As Integer
    TypeExtention = Application.DefaultSaveFormat
    Application.DefaultSaveFormat = 51 'pour avoir par défaut .xlsx
     
    'on dimensionne tout le bazar
     
    Dim wbPrincipal As Workbook
     
    Dim wbSecondaire As Workbook
    Dim cell As Range
    Dim Extension As String, NomFichier As String, CheminDossier As String, CheminFichier As String
     
    'On affecte les variables
    Set wbPrincipal = ActiveWorkbook
    Extension = ".xlsx"
    CheminDossier = "C:\Users\cheerleaders\Desktop\Customer" 'Mets ici le chemin de ton dossier où tu veux créer les fichiers
     
    If Right(CheminDossier, 1) <> "\" And Right(CheminDossier, 1) <> "/" Then
        CheminDossier = CheminDossier & "\" 'cela mettra le \ si tu as oublié de le spécifier plus haut
    End If
     
    'On va 'scanner' la première colonne de ta liste. ELLE DOIT ETRE EN PREMIERE FEUILLE ET COMMENCER EN A1, sinon tu adaptes.
    For Each cell In wbPrincipal.Sheets(1).Range("D:D").SpecialCells(xlCellTypeConstants) 'ici, ma colonne est D, j'ai essayé de mettre D4 vu que ma premiere cellule est en D4 mais ça ne fonctionne pas :(
     
        NomFichier = Trim(cell.Text) 'la fonction Trim va supprimer les éventuels espaces au début et à la fin du contenu de la cellule
     
        CheminFichier = CheminDossier & NomFichier & Extension 'on construit le nom du fichier à partir des infos que l'on a 
     
        'ici on va vérifier si le fichier existe :
        'la fonction Dir(chemin) retourne le nom du fichier s'il existe, sinon ne retourne rien, donc des guillemets vides("") 
     
        Select Case Dir(CheminFichier)
            Case NomFichier & Extension 's'il a bien trouvé le fichier
                Set wbSecondaire = Workbooks.Open(CheminFichier)
            Case "" '(ou else ou vbnullstring) s'il n'a rien trouvé
                Set wbSecondaire = Workbooks.Add
                wbSecondaire.Sheets(1).Range("A1").Value = "A"
                wbSecondaire.Sheets(1).Range("B1").Value = "B"
                wbSecondaire.Sheets(1).Range("C1").Value = "C"
                wbSecondaire.Sheets(1).Range("D1").Value = "D"
                ' etc,.... '
     
                wbSecondaire.SaveAs CheminFichier
        End Select
     
        'Peu importe qu'on l'ait créé maintenant ou juste ouvert, on rajoute une ligne :
        With wbSecondaire.Sheets(1).Range("A" & Rows.Count).End(xlUp) 'je pense que le problème vient d'ici, je ne comprends pas la boucle.... 
            ThisWorkbook.Sheets(3).Range("C" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("N" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("G" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("H" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("H" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("AC" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("I" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("AB" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("J" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("D" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("K" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("E" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("L" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("F" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("M" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("G" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ThisWorkbook.Sheets(3).Range("OA" & inc).Copy
                        wbSecondaire.Activate
                        wbSecondaire.Sheets(1).Range("O" & ligne2).Select
                        wbSecondaire.Sheets(1).Paste
     
                        ' incrementation
                        ligne1 = ligne1 + 14
                        ligne2 = ligne2 + 14
                        ligne3 = ligne3 + 14
                        ligne4 = ligne4 + 14
                        ligne5 = ligne5 + 14
                        ligne6 = ligne6 + 14
                        ligne7 = ligne7 + 14
                        ligne8 = ligne8 + 14
                        ligne9 = ligne9 + 14
                        ligne10 = ligne10 + 14
                        ligne11 = ligne11 + 14
                        ligne12 = ligne12 + 14
                        ligne13 = ligne13 + 14
                        ligne14 = ligne14 + 14
                        inc = inc + 1
        End With
     
        wbSecondaire.Save
        wbSecondaire.Close SaveChanges = True 'Dans tous les cas on le ferme et on sauvegarde les modifs
     
        Set wbSecondaire = Nothing 'facultatif : on vide la variable objet
     
    Next cell
     
    Application.DefaultSaveFormat = TypeExtension 'on remet ce réglage comme avant la macro
     
    End Sub
    Donc, comme dis dans les commentaires, je ne comprends pas la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With wbSecondaire.Sheets(1).Range("A" & Rows.Count).End(xlUp)

    Je sais que je n'ai pas non plus changé ma façon de copier mes cellules, comme tu me l'as expliqué, car c'est une donnée de la ligne 1 cellule C qui va dans le nouveau classeur dans la ligne 4 cellule X par exemple, si ta méthode fonctionne pour ça aussi, je changerais après.

    Les données copiées doivent être copiées tous les 14 lignes (je crois qu'il y a une intégration dans un modèle par la suite mais je ne m'en occupe pas), c'est pour ça que j'ai mis une variable à chaque cellule. Je ne sais pas si c'est comme ça qu'on fait normalement... et je pense qu'il doit également y avoir un problème ici puisqu'il ne prend pas en compte l'incrémentation...

    Encore merci pour ton temps

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

Discussions similaires

  1. [XL-2007] Comment lier différents classeur en fonction de leur nom ?¨
    Par Blizard dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/01/2012, 19h03
  2. Création en C# de Fonctions Excell
    Par Smogling dans le forum C#
    Réponses: 1
    Dernier message: 09/01/2007, 14h27
  3. [Test-Excel] récupération des macros dans un classeur corrompu
    Par SilkyRoad dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2006, 23h22
  4. [VBA-Excel] Macro Création Case à cocher
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 21/07/2006, 10h18
  5. [VBA Excel] macro création de feuille
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 29/06/2006, 11h13

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