Creation nouveau classeur et ajout de "n" feuille

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 !

keepcool183

XLDnaute Occasionnel
Bonjour à tous,

Je reviens vers vous chers forumeurs pour corriger et compléter un bout de code.

Alors voila ce que je veux faire :

- A partir d'une listbox j'alimente une feuille modèle.
- Crée un nouveau classeur
- Pour chaque élément de la list copier la feuille modèle dans le nouveau classeur.

avec le code suivant j'arrive à créer les feuilles et mais dans le classeur de travail 😕

Code:
With Me.ListV
       For L = 0 To .ListCount - 1
       Range("D15").Value = .List(L)
        copie2

Sub copie2()
Dim MODELE As Worksheet
Set MODELE = Sheets("rendu 2")
Application.ScreenUpdating = False
For i = 1 To Range("j7").Value
Destination = ActiveWorkbook.Name
MODELE.Copy After:=Workbooks(Destination).Sheets(Workbooks(Destination).Sheets.Count)
ActiveSheet.Name = "Transfert" & i
Next
Application.ScreenUpdating = True
End Sub

Merci à ceux qui me liront 🙂
 
Re : Creation nouveau classeur et ajout de "n" feuille

Jusqu'à présent ce que j'ai compris c'est que tu copiais un "modèle" (dixit la macro) x fois vers un nouveau fichier donc forcément le contenu de ces feuilles est la même puisque tu fais toujours référence à la même feuille
Sheets("rendu 2")

Ta "nouvelle" demande est toute autre.
Il faudrait expliquer clairement ce qui doit se passer.
 
Re : Creation nouveau classeur et ajout de "n" feuille

Re Skoobi, salut Hasco 😀

En fait oui je copie la meme feuille mais si tu regarde le code de l'USF tu verra qu'en fait je copie la feuille aprés avoir transferé la valeur de la listbox 😉 les formules (index equiv) remplissent les autres champs.

Le problème c'est que j'ai des doublons 🙁

Bon week end 😉
 
Re : Creation nouveau classeur et ajout de "n" feuille

Re,

Bon, avec le peut d'élément que tu donnes..., voici ce que je comprends:

tu crés une copie de la feuille rendu2 pour chaque "codes véhicule".
Mais tu fais une autre boucle:
For i = 1 To MODELE.Range("j7").Value
A quoi sert cette boucle?
Car dans celle-ci tu renommes chaque fois la feuille et tu copies tout le temps les valeurs😕.
Le doublon va forcément se produire car au prochain véhicule comme la variable "i" recommence à "1" et bien le nom de la feuille sera à nouveau "Véhicule1"...
Pas logique tout ça.
Pour comprendre ce qui se passe exactement, place un point d'arrêt (bouton rouge) en cliquant dans la marge du code au début de la boucle.
Quand tu relances l'usf, dès que tu clic sur le bouton "synthèse", la macro va s'arrêter (pause) sur le point.
A ce moment là, tu poursuis en "pas à pas" (F8).
Observe ce qui se passe et corrige.
Si tu n'y arrive pas reviens nous voir mais en expliquant exactement ce que tu veux faire.
 
Dernière édition:
Re : Creation nouveau classeur et ajout de "n" feuille

Re Skoobi 🙂

Décidement je m'exprime mal 😛

Alors je vais essayer d'etre super explicite.

Je transfert le code véhicule dans la feuille rendu 2 puis copie la feuille dans un nouveau classeur et la renomme avec véhicule 1, 2 , 3.

C'est pour ça que j'ai mis la deuxième boucle :

For i = 1 to J7 (J7 contenant le nombre de véhicule)

mais tu as raison quand j'analyse le code en mode arrêt, il boucle sur les noms des feuilles puis sur les codes véhicules .

Donc en gros ce que je veux faire c'est transférer le code véhicule dans la feuille rendu 2, copier la feuille avec les valeurs et la coller dans un nouveau classeur avec comme nom "véhicule" et le n°.

Puis passer au prochain code véhicule....

Voila 🙂 en espérant que tu as bien compris ma requête 😀
 
Re : Creation nouveau classeur et ajout de "n" feuille

Re bonjour,

voici la correction:

Code:
  With Me.ListV
    For l = 0 To .ListCount - 1
      MODELE.Range("D15").Value = .List(l)
      Application.ScreenUpdating = False
      MODELE.Copy after:=NewWb.Sheets(NewWb.Sheets.Count)
      ActiveSheet.Name = "Véhicule" & l + 1
      ActiveSheet.UsedRange.Value = MODELE.UsedRange.Value
      MODELE.Range("A1:P64").Copy
      ActiveSheet.Range("A1:P64").PasteSpecial Paste:=xlPasteColumnWidths
    Next l
  End With
La raison de la feuille en trop ne vient pas de cette partie du code.
Si tu regarde la listbox, tu verras qu'il existe toujours une ligne supplémentaire vide.
Il y a un soucis lors de la création de cette liste.
Là j'ai pas le temps de regarder.
 
Re : Creation nouveau classeur et ajout de "n" feuille

Me revoilou:
Il y a un soucis lors de la création de cette liste.
Là j'ai pas le temps de regarder.
C'est par ici que ça se passe:

Code:
 '------------------Liste véhicule dynamique et sans doublons ^^
              Set mondico = CreateObject("Scripting.Dictionary")
  For Each Elmnt In Range(Sheets(ChoixVis.Value).[A3], Sheets(ChoixVis.Value).[a65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
 If Not mondico.Exists(Elmnt.Value) [COLOR=Blue][B]And Elmnt.Value <> ""[/B][/COLOR] Then mondico.Add Elmnt.Value, Elmnt.Value
 Next Elmnt
Pourquoi?
Car comme les cellules soit disant vides contiennes une formule, et bien elles étaient prises en compte.
 
Re : Creation nouveau classeur et ajout de "n" feuille

Re Skoobi,

Effectivement la listbox contenait une ligne vide, j'avais corrigé le code de la même manière en ajoutant Elmnt<>"".

Je test le nouveau code Lundi et je te dit ce qu'il en est 😉

Merci encore.

PS: Je pense que je vais déclarer les moments passés sur le forum comme des heures sup' 😀
 
Re : Creation nouveau classeur et ajout de "n" feuille

Bonjour Skoobi 🙂

J'ai testé ton code il marche mais il ne me permettait pas d'avoir les données par véhicules 😛

je l'ai donc modifié et au final (pour ceux que ça intéresse) ça donne ça :

Code:
Set MODELE = Sheets("rendu 2")
  Set NewWb = Workbooks.Add
   With Me.ListV
    For L = 0 To .ListCount - 1
      MODELE.Range("D15").Value = .List(L)
      Application.ScreenUpdating = False
      MODELE.Copy after:=NewWb.Sheets(NewWb.Sheets.Count)
      ActiveSheet.Name = "Véhicule" & L + 1
      ActiveSheet.UsedRange.Value = MODELE.UsedRange.Value
      MODELE.Range("A1:P74").Copy
      On Error Resume Next
      ActiveSheet.Range("A1:P74").PasteSpecial Paste:=xlPasteFormats
      ActiveSheet.Range("A1:P74").PasteSpecial Paste:=xlPasteValues
    Next L
    End With

Merci à toi encore une fois 😀

et A bientôt

EDIT : euh peux tu jeter un coup d'œil à ce bout de code :

Code:
If IsMissing(Sheets(UF1.visite.Value)) Then
Sheets("1").Copy after:=ActiveWorkbook.Sheets
activesheets.Name = UF1.visite.Value
End If

en fait ce que je veux exprimer c'est que si la feuille uf1.visite.value n'existe pas alors copier la feuille "1" et la renommer selon la valeur de uf1.visite 🙂
 
Dernière édition:
Re : Creation nouveau classeur et ajout de "n" feuille

Bonjour,

essaye plutôt comme ceci:

Code:
On Error Resume Next
test = Sheets(UF1.visite.Value).Name
If Err.Number <> 0 Then
  Sheets("1").Copy after:=ActiveWorkbook.Sheets
  activesheets.Name = UF1.visite.Value
End If
On Error GoTo 0
End If

C'est-à-dire passer par une gestion d'erreur détectant l'existence de la feuille pour la créer si nécessaire.
 
- 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
2
Affichages
546
Retour