Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
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
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
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
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.
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
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
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.
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
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?
.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
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
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"
- 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