Bouton excel pour créer des classeur à partir d'un tableau [Résolu/Fermé]

Messages postés
3
Date d'inscription
dimanche 8 mai 2016
Statut
Membre
Dernière intervention
9 mai 2016
- - Dernière réponse : KAD2400
Messages postés
3
Date d'inscription
dimanche 8 mai 2016
Statut
Membre
Dernière intervention
9 mai 2016
- 9 mai 2016 à 10:27
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.
Afficher la suite 

2 réponses

Messages postés
4574
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 septembre 2019
117
0
Merci
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

KAD2400
Messages postés
3
Date d'inscription
dimanche 8 mai 2016
Statut
Membre
Dernière intervention
9 mai 2016
-
Un grand merci, ça marche à un petit détail près le chemin d'accès ne s'affiche pas dans le tableau principal.
Messages postés
4574
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 septembre 2019
117
0
Merci
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

KAD2400
Messages postés
3
Date d'inscription
dimanche 8 mai 2016
Statut
Membre
Dernière intervention
9 mai 2016
-
Un grand merci pour tes réponses aussi rapide, c'est parfait :D