Bouton excel pour créer des classeur à partir d'un tableau

Résolu
KAD2400 Messages postés 3 Statut Membre -  
KAD2400 Messages postés 3 Statut Membre -
Bonjour,
je suis actuellement en stage et on m'a demandé de créer un bouton excel pouvant crée des classeur avec le nom et données d'un autre tableau excel toute en indiquant le répertoire dans une colonne Voici une image pour mieux comprendre mon problème


pour faire claire le bouton doit créer des classeur PAR001, V002, V2003 ... avec comme donné alpha position et ref toute en indiquant le chemin dans la cellule fichier( voici le répertoire ou je souhaite mettre mes classeurs C:\Users\natsuwoow\Desktop\calcul).
Vu que j'ai que quelque bases sur vba je n'arrive pas à créer une macro qui fonctionne.

Merci de bien vouloir m'aider.

2 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Kad, bonjour le forum,

    Peut-être comme ça :

    Sub Macro1()
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim NC As String 'déclare la variable NC (Nom du Classeur)
    Dim CH As String 'déclare la variable CH (CHemin d'accès du Classeur)
    Dim J As Byte 'déclare la variable J (jncrément)
    Dim TD(1 To 2, 1 To 3) As Variant 'déclare la variable TD (Tableau des Données)
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    
    Set CS = ThisWorkbook 'définit le classeur source CS
    Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS (à adapter)
    TV = OS.Range("C4").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        NC = TV(I, 2) & TV(I, 1) 'définit le nom du classeur NC
        CH = TV(I, 6) & "\" 'définit le chemin d'accès du classeur CH
        For J = 1 To 3
            TD(1, J) = TV(1, J + 2)
            TD(2, J) = TV(I, J + 2)
        Next J
        Workbooks.Add 'ouvre un classeur vierge
        ActiveWorkbook.SaveAs (CH & NC) 'enregiste-sous le classeur vierge
        Set CD = ActiveWorkbook 'définit le classeur de destiation CD
        Set OD = CD.Sheets(1) 'définit l'onglet de destination OD
        'revoie le tableau des données TD dans la cellule A1 (redimensionnée) de l'onglet OD
        OD.Range("A1").Resize(2, 3).Value = TD
        CD.Close True 'ferme le classeur destination en enregistrant les modifications
    Next I 'prochaine ligne de la boucle 1
    End Sub

    0
    1. KAD2400 Messages postés 3 Statut Membre
       
      Un grand merci, ça marche à un petit détail près le chemin d'accès ne s'affiche pas dans le tableau principal.
      0
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    J'avais mal compris pardon...
    Essaie ce nouveau code :

    Sub Macro1()
    Const CH As String = "C:\Users\natsuwoow\Desktop\calcul\" 'déclare et définit la constante CH
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim NC As String 'déclare la variable NC (Nom du Classeur)
    Dim J As Byte 'déclare la variable J (jncrément)
    Dim TD(1 To 2, 1 To 3) As Variant 'déclare la variable TD (Tableau des Données)
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    
    Set CS = ThisWorkbook 'définit le classeur source CS
    Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS (à adapter)
    TV = OS.Range("C4").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        NC = TV(I, 2) & TV(I, 1) 'définit le nom du classeur NC
        TV(I, 6) = CH 'renvoie le chemin d'accès du classeur CH dans la données ligne I colonne 6 de TV
        For J = 1 To 3
            TD(1, J) = TV(1, J + 2)
            TD(2, J) = TV(I, J + 2)
        Next J
        Workbooks.Add 'ouvre un classeur vierge
        ActiveWorkbook.SaveAs (CH & NC) 'enregiste-sous le classeur vierge
        Set CD = ActiveWorkbook 'définit le classeur de destiation CD
        Set OD = CD.Sheets(1) 'définit l'onglet de destination OD
        'revoie le tableau des données TD dans la cellule A1 (redimensionnée) de l'onglet OD
        OD.Range("A1").Resize(2, 3).Value = TD
        CD.Close True 'ferme le classeur destination en enregistrant les modifications
    Next I 'prochaine ligne de la boucle 1
    End Sub

    0
    1. KAD2400 Messages postés 3 Statut Membre
       
      Un grand merci pour tes réponses aussi rapide, c'est parfait :D
      0