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

Boite de dialogue en vba pour copie de feuilles au choix

  • Initiateur de la discussion Christophe
  • Date de début
C

Christophe

Guest
Bonjour à tous
J'ai un classeur avec une feuille paramétré avec différents calculs et affichage de colonne.
Il faut que je crée au maximum 60 feuilles identiques à la 1er...ça ok
Par contre c'est un tableau de suivi d'appel d'offres et suivant les cas, il faut que j'ai 10 feuilles ou 15 ou 3..;tout dépend du nombre de lots

Est ce qu'il est possible de créer une boite en vba (avec la macro derrière bien sur...mais je sais pas la faire) qui me permettrai de mettre le nombre de feuilles nécessaires à chaque fois
Merci d'avance à tous

christophe
 
S

Sebb

Guest
Salut !
Voilà j'ai fais une macro qui devrait marcher si j'ai bien compris ce que tu voulais.
Elle n'est pas optimisée car on pourrait ajouter le choix de la Feuille à copier.
Actuellement, il faut que tu te mettes sur la feuille à copier avant de lancer la macro ... si tu veux mieux dis le ! voici le code en attendant
__________________________________________________________
Sub CopiesAgogo()
'
' Macro enregistrée le 18/06/2004 par Seb
'
'
NbFeuille = ActiveSheet.Index
Repet = InputBox("Combien voulez-vous de copies?")
For i = 1 To Repet
Sheets(NbFeuille).Copy Before:=Sheets(NbFeuille + i)
Next
End Sub
 
C

Christophe

Guest
Salut sebb

Nickel
ça marche du feu de dieu, c'est exactement ce que je recherchais
En plus ( et c'est accessoire), j'aime bien le nom de la macro
Merci de ta réponse rapide

Christophe
 
@

@+Thierry

Guest
Bonjour Christophe, Sebb, le Forum

Dans le style un peu plus éléboré pour manupuler des Feuilles je vous conseil cette démo :

Description :
Un UserForm va lister dans une ListBox avec Propriété MultiSelect toutes les feuilles de ce classeur sauf celle-ci.
Le User va pouvoir ensuite faire sa sélection de feuilles à copier, et il aura la possiblité de choisir :
=> Copie des feuilles sélectionnées vers un Nouveau Classeur.
=> Copie des feuilles sélectionnées vers classeur existant.

Cette dernière option va permettre de faire "deux/trois petites choses" :
=> Proposer une boite de dialogue "GetOpenFileName" pour sélectionner un classeur existant.
=> Vérifier si les feuilles existent déjà dans ce classeur sélectionné, auquel cas elles seront supprimées.
=> Intégrer en fin de d'index des feuilles existantes dans ce classeurs les nouvelles à importer
=> Proposer en fin de traitement de sauver et fermer directement le classeur ayant reçu l'import de feuilles...


=> Démo Téléchargeable Lien supprimé (18k)

=> Fil de Discussion Lien supprimé (à lire si vous souhaitez ajouter une option pour choisir un nom et sauver le Classeur automatiquement dans le cas du choix vers un nouveau classeur...

Bon Appétit
@+Thierry

PS Sebb, t'as vu hier soir j'ai utilisé ton gil, c'était le moment !!!
 
C

Christophe

Guest
Que dire de plus...merci à tous
J'ai la solution immédiate à mon pb...et des possibilités pour obtenir des améliorations...nickel

Sebb, une petite question pratique...mais pas grave du tout
Ds ta macro, qd la boite de dial est activé pour le choix du nombre de feuille, si jamais on clique sur le bouton Annuler et ensuite déboguer..cela t'envoi sur les feuilles VBA...pas de souci pour moi, mais je vais confier le classeur avec les macros à des utilisateurs lambda qui ne connaissent pas le vba et encore moins l'enregistreur de macro.

Serait il possible ...que le bouton annuler déclenche la fermeture de la boite comme un bouton "annuler" classique (je sais je chipote)

merci d'avance

Christophe
 
@

@+Thierry

Guest
Re Salut à tous,

Un mini gestionnaire d'erreur devrait suffir pour cette minie macro ...

Sub CopiesAgogo()
Dim Repet As Byte

NbFeuille = ActiveSheet.Index
On Error GoTo Out
Repet = InputBox("Combien voulez-vous de copies?")
For i = 1 To Repet
Sheets(NbFeuille).Copy Before:=Sheets(NbFeuille + i)
Next
Exit Sub
Out:
End Sub

Bon Aprèm
@+Thierry
 
T

Ti

Guest
en fait, il vaut mieux passer par Application.InputBox plutôt que par la fonction InputBox. D'autre part, il ne faut pas oublier de déclarer TOUTES les variables utilisées :

Sub CopiesAgogo()
Dim Repet%, NbFeuille%, i%
NbFeuille = ActiveSheet.Index
Repet = Application.InputBox("Combien voulez-vous de copies?", Type:=1)
For i = 1 To Repet
Sheets(NbFeuille).Copy Before:=Sheets(NbFeuille + i)
Next
End Sub
 
C

Christophe

Guest
Merci sebb, @+thierry et Ti....n'en jetez plus

J'ai exactement ce qu'il me faut
Je vais pouvoir confier ce classeur sans crainte de plantage
Etant bousculer pour rendre ce boulot dans les tps, vous m'enlevez une sacré épine du pied
Chapeau bas messieurs

A+ à tous

christophe
 
@

@+Thierry

Guest
Hi hi hi !!

Ti m'a eu !! lol......... En Flag !!!!

Par contre le Repet as Byte devrait suffir plutôt qu'Integer, çà fait une limit "naturelle" à 255 feuilles copiées !!

@+Thierry
 
T

Ti

Guest
exact, mais je suis paresseux, et i% est plus rapide à écrire que i as Byte. D'autre part, je ne suis jamais allé voir (il me faudrait un débogueur plus puissant que celui du VB) mais vu comme le VB est peu optimisé, je ne serais pas étonné qu'un Byte prenne autant de place ou tout au moins autant de temps à manipuler qu'un Integer, c'est pourquoi je ne mets pratiquement plus de Byte dans mon code (sauf dans les tableaux)
 
@

@+Thierry

Guest
lol Sebb, bonsoir à tous

oui enfin non c'est pas ton beau Gilet c'est celui à Caro !!! lol

Niark !!! '<<<<<< à la Vériland !!!

Bonne Nuit
@+Thierry
 

Discussions similaires

Réponses
10
Affichages
605
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…