Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

création de classeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

grisan29

XLDnaute Accro
bonjour a tous

quel code peut-on mettre derrière un bouton sur un usf pour créer un classeur(workbook) a 1 feuille(worksheet) automatiquement en lui donnant le nom qui est dans la liste d'une combobox

Merci de vos solutions

Pascal
 
Dernière édition:
Re : création de classeur

Bonsoir grisan29,

Code:
Private Sub CommandButton1_Click()
Dim chemin$
chemin = ThisWorkbook.Path & "\" 'chemin d'accès à adapter
On Error Resume Next 'par exemple si ComboBox1 est vide
With Workbooks.Add(xlWBATWorksheet)
  .Sheets(1).Name = ComboBox1
  .SaveAs chemin & ComboBox1
End With
End Sub
A+
 
Re :RESOLU création de classeur

bonsoir Job75😎

un très grand MERCI😎😎 un premier jet a montré ta qualité de spécialiste en entraide vba😎😎

cet incartade rapide clos le post que tu a rondement mené😎😎😎

Pascal
un petit plus
peut-on mettre une entète sur la feuille qui est crée, mais le souci sera de mettre dans une cellule le nom de la feuille
je pense avoir une entête identique pour chaque valeur du combobox

Pascal
 
Dernière édition:
Re : création de classeur

Bonjour à tous

un petit plus
peut-on mettre une entète sur la feuille qui est crée, mais le souci sera de mettre dans une cellule le nom de la feuille
La réponse est oui.
Et pour avoir le code VBA, il suffit de le faire tout en laissant l’enregistreur de macros et d'adapter ensuite dans VBE le code VBA ainsi obtenu.
 
Re : création de classeur

Re

Je parlais de l'enregistreur de macros pour ce qui concerne la création de l'entête.
Ce qui génère un code VBA pour cette action.
Ensuite on arrête l’enregistreur de macros.
Et on va voir dans VBE, le code VBA obtenu et c'est ce code qu'on adapte (manuellement) à ses besoins.

PS: VBE= Visual Basic Editor
C'est là où on se trouve quand on fait ALT+F11
 
Re : création de classeur

Bonsoir grisan29, Jean-Marie,

On peut mettre en forme la feuille comme on veut bien sûr :

Code:
Private Sub CommandButton1_Click()
Dim chemin$
chemin = ThisWorkbook.Path & "\" 'chemin d'accès à adapter
On Error Resume Next 'par exemple si ComboBox1 est vide
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
  .Name = ComboBox1
  .[A1] = ComboBox1 'en-tête
  'suite des mises en forme de la feuille
  .Parent.SaveAs chemin & ComboBox1
  .Parent.Close False 'facultatif
End With
End Sub
A+
 
Re : création de classeur

bonjour Job75, staple1600 et le forum
voici comment j'ai modifié le code pour créer la feuille avec une entête, peut être pas catholique mais c'est mon style
Code:
Private Sub CommandButton2_Click()
Dim chemin$
chemin = "c:\facturation-test\commandes\" 'chemin d'accès à adapter
On Error Resume Next 'par exemple si ComboBox1 est vide
With Workbooks.Add(xlWBATWorksheet).Sheets(1)

  .Name = ComboBox1
  .[A1].ColumnWidth = 12.75
  .[B1].ColumnWidth = 43.67
  .[C1].ColumnWidth = 3.67
  .[D1].ColumnWidth = 4.67
  .[E1].ColumnWidth = 5.67
  .[F1].ColumnWidth = 10.67
  .[G1].ColumnWidth = 12.67
  .[H1].ColumnWidth = 4
  .[B5] = ComboBox1 'en-tête
  .[A5] = "Fournisseurs"
  .[A6] = "N° d'offre"
  .[B2] = "Affaire suivi par :  Pascal"
  .[A1].RowHeight = 27
  .[B1] = "entreprise"
  .[A1].HorizontalAlignment = xlCenter
  .[A1].VerticalAlignment = xlCenter
  .[B2] = "adresse"
  .[B3] = "cp et ville"
  .[B7] = "désignation"
  .[C1] = "Bon de commande n°:"
  .[C2] = "ville le :"
  .[F2] = Date
  .[C3] = "début début travaux:"
  .[F3] = Date + 40
  .[C4] = "référence client"
  .[C7] = "Unité"
  .[D7] = "quantité"
  Call Macro3
  'suite des mises en forme de la feuille
  .Parent.SaveAs chemin & ComboBox1
  '.Parent.Close False 'facultatif
End With
End Sub

la macro3 issu de l'enregistreur me permet de faire les bordures ,je l'ai réduit au maximum de mes possibilités

Code:
Sub Macro3()
'
' Macro3 Macro
'

'
    With Range("B1:B7,A5:A6,C1:F4,C7:D7,C5:F5")
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With
     Range("C5:F5").MergeCells = True
    
   
   
    
End Sub
mais en voulant ajouter une ligne dans la feuille crée j'ai un bug a cette ligne
Code:
Set rg = Sh.Range("A65536").End(xlUp).Offset(1, 0) 'cellule destination
mais comme vous ne connaissez pas le fichier je vais vous le joindre pour une meilleure compréhension

staple1600
Je parlais de l'enregistreur de macros pour ce qui concerne la création de l'entête.
est ce le bouton qui affiche "mode de création " en le survolant ?

Pascal
 

Pièces jointes

Re : création de classeur

Re

Tu peux encore réduire
Code:
Sub Macro3()
Range("B1:B7,A5:A6,C1:F4,C7:D7,C5:F5").Borders.LineStyle = 1
Range("C5:F5").MergeCells = True
End Sub

ou sans passer par macro3 (mais dans le code du bouton directement)
à insérer là ou tu avais mis Call macro3 (en lieu et place)
Code:
Private Sub CommandButton2_Click()
'Ici ton code initial
.Range("B1:B7,A5:A6,C1:F4,C7:D7,C5:F5").Borders.LineStyle = 1
.Range("C5:F5").MergeCells = True
'suite de ton code initial
End Sub
 
Dernière édition:
Re : création de classeur

bonjour staple
Waouh c'est ce qui s'appelle de la réduction venant d'un spécialiste d'entraide, j’étais déjà content d'avoir réduit a environ 80% le code obtenu de l'enregistreur
et que pense tu reste de ce code?

Pascal
 
Re : création de classeur

Re

Tu peux encore le réduire un peu en utilisant d'autres With/End With.
(je laisse essayer la chose)

Le principal c'est pas ce que j'en pense, c'est que le code te satisfasse.
(car comme on dit: les gouts, les couleurs 😉 )
 
Re : création de classeur

Bonjour Staple
je ne vois pas comment le réduire plus que ceci
Code:
.Name = ComboBox1
  .[A1].ColumnWidth = 12.75
  .[B1].ColumnWidth = 43.67
  .[C1].ColumnWidth = 3.67
  .[D1].ColumnWidth = 4.67
  .[E1].ColumnWidth = 5.67
  .[F1].ColumnWidth = 10.67
  .[G1].ColumnWidth = 12.67
  .[H1].ColumnWidth = 4
  .[B5] = ComboBox1 'en-tête
  .[A5] = "Fournisseurs"
  .[A6] = "N° d'offre"
  .[B2] = "Affaire suivi par :  Pascal"
  With .[A1]
    .RowHeight = 27
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
  End With
  .[B1] = "entreprise"
  .[B2] = "adresse"
  .[B3] = "cp et ville"
  .[B7] = "désignation"
  .[C1] = "Bon de commande n°:"
  .[C2] = "ville le :"
  .[F2] = Date
  .[C3] = "début début travaux:"
  .[F3] = Date + 40
  .[C4] = "référence client"
  .[C7] = "Unité"
  .[D7] = "quantité"
  Range("B1:B7,A5:A6,C1:F4,C7:D7,C5:F5").Borders.LineStyle = 1
Range("C5:F5").MergeCells = True
 
Re : création de classeur

Re

Encore un petit chouia 😉
Code:
.Name = ComboBox1
 With .[A1]
    .RowHeight = 27
    .ColumnWidth = 12.75
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
  End With

EDITION: Tu peux aussi remplir tes cellules* autrement (comme sur ce mini exemple)
Il faut veiller dans ce cas que les tableaux (array) soient de même taille et dans avec leurs élément dans un ordre identique.
*: uniquement les cellules avec des strings pour éviter d'éventuelles surprises.
Code:
Sub autrefaconderemplircellules()
Dim acell, vcell, i as Byte
acell = Array("A5", "A6", "B2")
vcell = Array("Fournisseurs", "N° d'offre", "Affaire suivi par :  Pascal")
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
    For i = LBound(acell) To UBound(acell)
    .Range(acell(i)) = vcell(i)
    Next i
End With
End Sub
 
Dernière édition:
Re : création de classeur

re
d'accord je m'incline pas vu la ligne A1 de le la largeur de la colonne, mais autrement comme ce sont des cellules différentes je ne n'ai le visu adéquate pour comprendre la méthode

Pascal
 
Re : création de classeur

Re

Tu as testé ma dernière macro (dans l'édition du précédent message)
Tu as compris le principe pour remplir les cellules?

Sinon ici tu utilises deux fois [B2]
Donc la dernière valeur de B2 sera adresse
.[B2] = "Affaire suivi par : Pascal"
With .[A1]
.RowHeight = 27
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
.[B1] = "entreprise"
.[B2] = "adresse"
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
266
Réponses
8
Affichages
314
Réponses
1
Affichages
285
W
Réponses
12
Affichages
366
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…