Comment créer un nombre de feuille selon une variable dans une feuille Escel
Tags :
Dernière réponse : dans Programmation
Bonjour,
Voilà, je suis un débutant en VBA (et c'est peu de le dire, mais il y a un début à tout) et jusque'ici, je parvenais à faire tout ce que je souhaitais dans Excel sans VBA (je suis un pro des formules de calculs, mais ignare en VBA).
Aujourd'hui, mon problème est que je dois créer un formulaire où, lorsque l'on rentre un nombre dans une cellule (appellons-là V5) et que l'on clique sur un bouton "OK", cela copie une feuille (appellons-là Feuille2) autant de fois que la valeur de V5.
Je suis certains qu'au moins l'un d'entre vous, spécialistes en VBA, trouverez cette question trop facile, alors, n'hésitez pas : épattez-moi !
Merci d'avance.
Voilà, je suis un débutant en VBA (et c'est peu de le dire, mais il y a un début à tout) et jusque'ici, je parvenais à faire tout ce que je souhaitais dans Excel sans VBA (je suis un pro des formules de calculs, mais ignare en VBA).
Aujourd'hui, mon problème est que je dois créer un formulaire où, lorsque l'on rentre un nombre dans une cellule (appellons-là V5) et que l'on clique sur un bouton "OK", cela copie une feuille (appellons-là Feuille2) autant de fois que la valeur de V5.
Je suis certains qu'au moins l'un d'entre vous, spécialistes en VBA, trouverez cette question trop facile, alors, n'hésitez pas : épattez-moi !
Merci d'avance.
Autres pages sur : creer nombre feuille variable feuille escel
Lassé par la pub ? Créez un compte
Salut,
Je t'invite à la lecture de ce topic : Vous vous lancez dans le développement de macros Excel ? Lisez ceci !. Tu devrais avoir un bon gros début de réponse. On en reparle quand tu auras un premier bout de code ?
Je t'invite à la lecture de ce topic : Vous vous lancez dans le développement de macros Excel ? Lisez ceci !. Tu devrais avoir un bon gros début de réponse. On en reparle quand tu auras un premier bout de code ?
- | Alerter
Bonjour,
je cherche la même chose que toi jprieux.
voilà ce que j'ai trouver:
mais pour l'instant je n'arrive pas à le mettre en place.
J'ai ma première feuille nommé listing, la valeur que doit représenté le nombre de copie se trouve en listing!i3 avec une zone d'impression zoneA situé sur une autre feuille nommé etiquette.
Pour l'instant je fais mes test avec PrintPreview.
Je suis bloqué, si quelqu'un pourrai me mettre sur la voie...
merci
je cherche la même chose que toi jprieux.
voilà ce que j'ai trouver:
Sub imprimeClasseur()
Dim X As Byte
On Error goTo gestionErreur
X = inputBox('Saisir le nombre de copies à effectuer . ', 'Impression')
activeWorkbook.printOut Copies:=X, Collate:=True
Exit Sub
gestionErreur:
If Err = 13 Then msgBox 'Saisie non valide .'
End Sub
mais pour l'instant je n'arrive pas à le mettre en place.
J'ai ma première feuille nommé listing, la valeur que doit représenté le nombre de copie se trouve en listing!i3 avec une zone d'impression zoneA situé sur une autre feuille nommé etiquette.
Pour l'instant je fais mes test avec PrintPreview.
Je suis bloqué, si quelqu'un pourrai me mettre sur la voie...
merci
- | Alerter
- | Alerter
Contenus similaires
- Programmation en excel pdf - Forum
- Excel recherchev plusieurs feuilles - Forum
- Excel formule tva - Forum
- Copier feuille excel dans un autre classeur - Forum
- | Alerter
- | Alerter
- | Alerter
oui, j'ai bien essayé mais je n'arrive pas à lui faire copier un nombre de feuille demandé. C'est cette fonction que je ne trouve pas
Merci
Sub nb_pieces()
'
' nb_pieces Macro
'
'
ActiveCell.FormulaR1C1 = "2"
Range("V6").Select
Sheets("Revue de Contrat").Select
Sheets("Revue de Contrat").Copy After:=Sheets(5)
Sheets("Revue de Contrat").Select
Sheets("Revue de Contrat").Copy After:=Sheets(6)
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Phase Etude").Select
End Sub
Merci
- | Alerter
- | Alerter
j'ai essayé ça, mais j'ai un message d'erreur "impossible d'exécuter le code en mode Arrêt" :
Merci
Sub nb_piece()
'
' nb_piece Macro
'
Dim X As Byte
On Error GoTo gestionErreur
X = TextBox 'Saisie'
Sheets("Revue de Contrat").Select
Sheets("Revue de Contrat").Copy After:=Sheets(5).Copy = X, Collate:=True
Exit Sub
gestionErreur:
If Err = 13 Then MsgBox 'Saisie non valide .'
End Sub
Merci
- | Alerter
- | Alerter
Meilleure solution
Ah ! ....
T'aurais pu modifier ton message plutôt que de tout refaire. Spa grave.
--------------------------
Bon, alors il s'agit de ne pas faire n'importe quoi.
Relis le code de snakezap, on y utilise InputBox, pas TextBox.
Pis c'est quoi ce bordel ?
Au début de chacun de tes modules, écris la ligne suivante. Cela va restreindre la permissivité du langage VB, mais ce sera d'un grand bénéfice.
--------------------------
Etape 1
Avant de s'emmerder avec des saisies, on va faire simple. Soit N le nombre de copies voulues.
Et voilà !
Bon, moi je n'aime pas les sheets génériques (feuilles quelconques). Comme j'aime à savoir ce que je fais, j'utilise des Worksheets (feuilles de calcul).
Etape 2
Bon, maintenant, on se dit que ce serait bien mieux de mettre les nouvelles feuilles à la fin.
Comment savoir quelle est la dernière feuille ? Existe-t-il un Sheets.LastSheet ?
Ben non. Va falloir le faire soi-même. En revanche, il existe un Sheets.Count.
On a donc le nombre de feuilles totale. En plus, une feuille peut être désignée par son nom Sheets("Revue de Contrat"), ou par son numéro Sheets(12).
Pratique non ? Ben si, regarde. La dernière feuille est : Sheets(Sheets.Count).
Stro facile
Etape 2
Bon, maintenant qu'on sait faire pour N=3, on va essayer pour N quelconque.
Soit on pose la question à l'utilisateur (cf. code de snakezap), soit on ramasse l'info sur la feuille.
Dans tous les cas, moi j'en fous, je traite le cas général :
Maintenant, il suffit d'appeler correctement notre photocopieuse.
En "dur" :
En "interactif" :
snakezap, profites-en pour corriger ton code horrible et bencale.
En VB, on utilise des doubles-quotes pour les chaînes.
Ta gestion des erreurs est abominable : tu laisses l'application se planter au lieu de tester tes variables.
Et ton étiquette s'appelle gestionErreur, beurk ! (Spice de javaiste, va !
)
[Avant de t'énerver tout rouge, évalue le niveau d'ironie de mon commentaire
]
En "automatique" :
C'est ce que tu attendais ?
T'aurais pu modifier ton message plutôt que de tout refaire. Spa grave.
--------------------------
Bon, alors il s'agit de ne pas faire n'importe quoi.
Relis le code de snakezap, on y utilise InputBox, pas TextBox.
Pis c'est quoi ce bordel ?
Sheets("Revue de Contrat" ).Copy After:=Sheets(5).Copy = X, Collate:=True
Au début de chacun de tes modules, écris la ligne suivante. Cela va restreindre la permissivité du langage VB, mais ce sera d'un grand bénéfice.
Option Explicit
--------------------------
Avant de s'emmerder avec des saisies, on va faire simple. Soit N le nombre de copies voulues.
Dim I As Integer Dim N As Integer N = 3 For I = 1 To N Sheets("Revue de Contrat").Copy After:=Sheets("Revue de Contrat") Next
Et voilà !
Bon, moi je n'aime pas les sheets génériques (feuilles quelconques). Comme j'aime à savoir ce que je fais, j'utilise des Worksheets (feuilles de calcul).
Dim I As Integer Dim N As Integer N = 3 For I = 1 To N Worksheets("Revue de Contrat").Copy After:=Worksheets("Revue de Contrat") Next
Bon, maintenant, on se dit que ce serait bien mieux de mettre les nouvelles feuilles à la fin.
Comment savoir quelle est la dernière feuille ? Existe-t-il un Sheets.LastSheet ?
Ben non. Va falloir le faire soi-même. En revanche, il existe un Sheets.Count.
On a donc le nombre de feuilles totale. En plus, une feuille peut être désignée par son nom Sheets("Revue de Contrat"), ou par son numéro Sheets(12).
Pratique non ? Ben si, regarde. La dernière feuille est : Sheets(Sheets.Count).
Stro facile
Dim I As Integer Dim N As Integer N = 3 For I = 1 To N Worksheets("Revue de Contrat").Copy After:=Sheets(Sheets.Count) Next
Bon, maintenant qu'on sait faire pour N=3, on va essayer pour N quelconque.
Soit on pose la question à l'utilisateur (cf. code de snakezap), soit on ramasse l'info sur la feuille.
Dans tous les cas, moi j'en fous, je traite le cas général :
Sub Photocopieuse(sh As WorkSheet, N As Integer) Dim I As Integer For I = 1 To N sh.Copy After:=Sheets(Sheets.Count) Next End Sub
Maintenant, il suffit d'appeler correctement notre photocopieuse.
En "dur" :
Photocopieuse Worksheets("Revue de Contrat"), 3
En "interactif" :
Sub PhotocopieSaisie() Dim reponse As String Do reponse = InputBox("Nombre de copies", "MultiCopie") If reponse = "" Then Exit Sub Loop While Not IsNumeric(reponse) Photocopieuse Worksheets("Revue de Contrat"), CInt(X) End Sub
snakezap, profites-en pour corriger ton code horrible et bencale.
En VB, on utilise des doubles-quotes pour les chaînes.
Ta gestion des erreurs est abominable : tu laisses l'application se planter au lieu de tester tes variables.
Et ton étiquette s'appelle gestionErreur, beurk ! (Spice de javaiste, va !
)
[Avant de t'énerver tout rouge, évalue le niveau d'ironie de mon commentaire
]En "automatique" :
Sub PhotocopieAutomatique() If IsNumeric(Range("V5").Value) Then Photocopieuse Worksheets("Revue de Contrat"), Range("V5").Value End Sub
C'est ce que tu attendais ?
- | Alerter
- | Alerter
- | Alerter
Bonjour,
pas de soucis zeb
ton code fonctionne, mais j'ai d'autre soucis à réglé avec ce type de code.
Je t'expose mon problème. Je dois réalisé pour mon entreprise des étiquettes de transport.
Actuellement nous le faisons à la main(copier/coller) pour créer ces étiquettes.
sachant qu'il peut avoir de 1 à 30 étiquettes par client, et que je me tape environ 100 à 200client par jour.
On va bientôt avoir un export csv fonctionnelle qui nous fera gagné énormément de temps.
Sur ces étiquettes je dois noté le nom du transporteur, les coordonnées client, le nombres de colis, le volume et quels produits nous envoyons.
J'ai eu l'idée de créer un listing complet dans un tableau (Feuil1) et que dans une autre feuille il y a les étiquettes qui récupère les données de ce listing. via quelques fonction Si j'ai trouvé une solution mais je voudrais amélioré les choses car il faut sans arret faire des filtres et plein de bidouille pour les imprimé, donc source d'erreur.
Quelques transporteurs exporte les données via pdf mais je ne sais pas comment faire tout cela.
Si quelqu'un à une solution, ça serrait super
merci d'avance.
PS: Vu que c'est un autre soucis dois-je créer un autre sujet?
pas de soucis zeb
ton code fonctionne, mais j'ai d'autre soucis à réglé avec ce type de code.
Je t'expose mon problème. Je dois réalisé pour mon entreprise des étiquettes de transport.
Actuellement nous le faisons à la main(copier/coller) pour créer ces étiquettes.
sachant qu'il peut avoir de 1 à 30 étiquettes par client, et que je me tape environ 100 à 200client par jour.
On va bientôt avoir un export csv fonctionnelle qui nous fera gagné énormément de temps.
Sur ces étiquettes je dois noté le nom du transporteur, les coordonnées client, le nombres de colis, le volume et quels produits nous envoyons.
J'ai eu l'idée de créer un listing complet dans un tableau (Feuil1) et que dans une autre feuille il y a les étiquettes qui récupère les données de ce listing. via quelques fonction Si j'ai trouvé une solution mais je voudrais amélioré les choses car il faut sans arret faire des filtres et plein de bidouille pour les imprimé, donc source d'erreur.
Quelques transporteurs exporte les données via pdf mais je ne sais pas comment faire tout cela.
Si quelqu'un à une solution, ça serrait super
merci d'avance.
PS: Vu que c'est un autre soucis dois-je créer un autre sujet?
- | Alerter
- | Alerter
Lassé par la pub ? Créez un compte
![[:zeb:6] [:zeb:6]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/77/40/zeb:6.gif)