Créer un nouveau classeur avec onglets

Bonjour,

Ma question du jour (et du week end qui approche) est la suivante :

J'ai deux documents :

  • Une base de données
  • Une fiche synthèse d'indicateurs. Ce document ne comporte qu'un onglet. J'ai d'un côté, ma fiche synthèse et de l'autre, un tableau qui se rempli automatiquement suivant le territoire choisi. Ce dernier n'est pas visible lors de l'impression (il est en dehors des marges d'impression)
Sub Générer()
Dim c, Fiche, Fc
Set Fiche = ActiveSheet

For Each c In Range("U10:U69" & Range("U69").End(xlUp).Row)
    If c.Value <> "" Then
    Workbooks("Fiche com.xlsm").Sheets("Fiche").Visible = True
    Workbooks("Fiche com.xlsm").Sheets("Fiche").Copy Before:=Sheets(1)
    ActiveSheet.Name = Range("AB10")
    Set Fc = ActiveSheet
    Workbooks("Fiche com.xlsm").Sheets("Fiche").Visible = True
    Sheets("Fiche").Range("AB10") = "'" & c.Value

    End If
Next c
End Sub

Avec le code actuel, je génère des onglets excel dans le document où se lance la macro. Or, je souhaiterai que tous les onglets créés se retrouvent dans un seul nouveau classeur.

De plus, je ne souhaiterai pas voir afficher mon tableau de données situé en dehors des marges d'impression. Comment sélectionné avant l'enregistrement, la plage de données que l'on souhaite conserver ?

Merci par avance !

Bonjour

Avec la copie de tes deux documents, même simplifiés et allégés, il serait peut-être plus facile de comprendre et de te proposer quelque chose.

Bye !

Bonjour,

Désolée de répondre aussi tartdivement ! En PJ, mon document simplifié.

Dans les colonnes AB à AD = liaison avec une base de données. Les nombres changent automatiquement suivant la valeur en AB10, AC10 et AD10.

J'ai rompu les liaisons avec la base de données qui permet de remplir correctement la fiche, la seule chose qui m’intéresse est de générer la plage de données B8:Q90 dans un nouvel onglet autant de fois qu'il y a de lignes non vides dans U10:U69. Le tout, regroupé dans un classeur.

Merci par avance de l'aide que vous m'apporterez !

31fiche-simple.xlsm (38.67 Ko)

Petit up, mon problème n'est toujours pas résolu, c'est pas faute d'essayer des instruction qui copie/colle

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Bonjour gmb

Dans l'idée c'est exactement ça ! Je te remercie

Cependant, je voudrai que le copié-collé de la plage de cellules se réalise en valeur (donc plus aucunes formules n’apparaît) une fois la fiche générée.

Est-il également possible de conserver les sauts de page déterminés dans mon fichier initial lors de la copie ?

Merci par avance !

Bonjour,

Bonjour gmb,

A tester.

Dans le module 'Exporter' de gmb, remplace :

ActiveSheet.Paste

par

ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats

* ou encore xlPasteValues

Cdlt.

Bonjour Jean-Eric

En effet, c'est beaucoup mieux, mais ça me retire l'ensemble de mes mises en forme...

Re,

Regarde l'aide Excel sur 'PasteSpecial' (double-clic sur le mot puis F1).

Tu auras la liste des constantes pour le collage spécial.

(au besoin, tu peux utiliser plusieurs constantes à la suite).

Cdlt.

Re, j'édite mon message...

J'ai utilisé l'enregistreur de macro pour faire ce dont je voulais. Ca fonctionne bien, mais c'est quand même un peu chelou.

Je vous mets l’entièreté de mon code (sur mon vrai fichier)

Sub Générer()
Dim c, Fiche, Fc, Classeur
Set Fiche = Workbooks("Fiche communale 3.xlsm").Sheets("FicheComPLH")

For Each c In Range("U10:U69" & Range("U69").End(xlUp).Row)
    If c.Value <> "" Then
    Workbooks("Fiche communale 3.xlsm").Sheets("FicheComPLH").Range("AB10") = "'" & c.Value
    Workbooks("Fiche communale 3.xlsm").Sheets("FicheComPLH").Visible = True
    Workbooks("Fiche communale 3.xlsm").Sheets("FicheComPLH").Copy Before:=Sheets(1)
    ActiveSheet.Name = Range("AB10")
    Set Fc = ActiveSheet
    Workbooks("Fiche communale 3.xlsm").Sheets("FicheComPLH").Visible = True
    End If

     ActiveSheet.Copy
    ActiveSheet.Name = Range("AB10")
    ActiveSheet.Shapes.Range(Array("TextBox 27")).Select
    Selection.Delete
    Columns("S:AH").Select
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Columns("B:Q").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A3").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft

Next c
MsgBox "Les fiches sont générées !"
End Sub

Après le End If, je supprime tout ce que je ne veux plus voir apparaître. Les instructions se réalisent bien, mais du coup, j'ai un classeur par ligne dans la plage de cellules U10:U69. Or ! Je souhaiterai avoir un nouveau classeur avec n onglets (n correspondant au nombre de lignes pleines dans U10:U69)

J'arrive pas à savoir où/comment créer le nouveau classeur et comment affecter la création des onglets dans ce même classeur

Edit n° 2 : Tout est bon ! J'ai trouvé comment faire

Mon code n'est peut être pas le plus clean du monde, mais il fonctionne.

Encore merci à tous les deux. Je reviendrai sûrement vers vous d'ici quelques jours !

Rechercher des sujets similaires à "creer nouveau classeur onglets"