Se connecter avec
S'enregistrer | Connectez-vous
Résolu

Comment créer un nombre de feuille selon une variable dans une feuille Escel

Tags :
Dernière réponse : dans Programmation
Partagez

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.

Bonjour,
je cherche la même chose que toi jprieux.

voilà ce que j'ai trouver:

  1. Sub imprimeClasseur()
  2. Dim X As Byte
  3. On Error goTo gestionErreur
  4. X = inputBox('Saisir le nombre de copies à effectuer . ', 'Impression')
  5. activeWorkbook.printOut Copies:=X, Collate:=True
  6. Exit Sub
  7. gestionErreur:
  8. If Err = 13 Then msgBox 'Saisie non valide .'
  9. 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
Contenus similaires

Merci, je vais essayer de partir de cela. Sachant que je ne souhaite pas imprimer les feuilles, mais copier les onglets en fin de classeur. Je vais essayer de trouver un bout de code, peut être en partant de ce que tu as indiqué.
Encore merci.

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

  1. Sub nb_pieces()
  2. '
  3. ' nb_pieces Macro
  4. '
  5.  
  6. '
  7. ActiveCell.FormulaR1C1 = "2"
  8. Range("V6").Select
  9. Sheets("Revue de Contrat").Select
  10. Sheets("Revue de Contrat").Copy After:=Sheets(5)
  11. Sheets("Revue de Contrat").Select
  12. Sheets("Revue de Contrat").Copy After:=Sheets(6)
  13. ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
  14. Sheets("Phase Etude").Select
  15. End Sub


Merci

Ah.....! :) 

__________________________________________
Dès que le règlement sera respecté, surtout en se qui concerne la balise [code], une solution basée sur ton code te sera proposée.
\
[:zeb:6]

j'ai essayé ça, mais j'ai un message d'erreur "impossible d'exécuter le code en mode Arrêt" :
  1. Sub nb_piece()
  2. '
  3. ' nb_piece Macro
  4. '
  5. Dim X As Byte
  6. On Error GoTo gestionErreur
  7. X = TextBox 'Saisie'
  8. Sheets("Revue de Contrat").Select
  9. Sheets("Revue de Contrat").Copy After:=Sheets(5).Copy = X, Collate:=True
  10. Exit Sub
  11. gestionErreur:
  12. If Err = 13 Then MsgBox 'Saisie non valide .'
  13. End Sub


Merci

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. :o 
Relis le code de snakezap, on y utilise InputBox, pas TextBox.
Pis c'est quoi ce bordel ?
  1. 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.
  1. Option Explicit


--------------------------

  • Etape 1

    Avant de s'emmerder avec des saisies, on va faire simple. Soit N le nombre de copies voulues.

    1. Dim I As Integer
    2. Dim N As Integer
    3.  
    4. N = 3
    5. For I = 1 To N
    6. Sheets("Revue de Contrat").Copy After:=Sheets("Revue de Contrat")
    7. 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).
    1. Dim I As Integer
    2. Dim N As Integer
    3.  
    4. N = 3
    5. For I = 1 To N
    6. Worksheets("Revue de Contrat").Copy After:=Worksheets("Revue de Contrat")
    7. Next


  • 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 :sol: 
    1. Dim I As Integer
    2. Dim N As Integer
    3.  
    4. N = 3
    5. For I = 1 To N
    6. Worksheets("Revue de Contrat").Copy After:=Sheets(Sheets.Count)
    7. Next


  • 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 :

    1. Sub Photocopieuse(sh As WorkSheet, N As Integer)
    2. Dim I As Integer
    3.  
    4. For I = 1 To N
    5. sh.Copy After:=Sheets(Sheets.Count)
    6. Next
    7. End Sub


    Maintenant, il suffit d'appeler correctement notre photocopieuse.

    En "dur" :
    1. Photocopieuse Worksheets("Revue de Contrat"), 3


    En "interactif" :
    1. Sub PhotocopieSaisie()
    2. Dim reponse As String
    3.  
    4. Do
    5. reponse = InputBox("Nombre de copies", "MultiCopie")
    6. If reponse = "" Then Exit Sub
    7. Loop While Not IsNumeric(reponse)
    8. Photocopieuse Worksheets("Revue de Contrat"), CInt(X)
    9. 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 ! :na:  )
    :o 
    [Avant de t'énerver tout rouge, évalue le niveau d'ironie de mon commentaire ;) ]

    En "automatique" :

    1. Sub PhotocopieAutomatique()
    2. If IsNumeric(Range("V5").Value) Then Photocopieuse Worksheets("Revue de Contrat"), Range("V5").Value
    3. End Sub


    C'est ce que tu attendais ?
  • Super et encore merci !
    Je commence un peu plus à aimer VBA...
    A très bientôt (il y ades chances, avec un bleu comme moi !)
    Ciao !

    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?

    Citation :
    PS: Vu que c'est un autre soucis dois-je créer un autre sujet?
    Oui, s'il te plaît. J'aurai plaisir à t'y filer un coup de main.
    Posez votre question