Créer des feuilles a partir d'un bouton

cj welch

XLDnaute Occasionnel
salut le forum,

je voudrais a partir d'un bouton créer autant de feuille qu'il y a de lignes saisie dans mon tableau.

de plus, je voudrais que les nouvelles feuilles créees récupèrent les données renseignées dans ce tableau.

je ne sais pas si c'est possible

merci de votre aide
 

ledzepfred

XLDnaute Impliqué
Re : Créer des feuilles a partir d'un bouton

tu as deux solutions

-ajouter un bouton recalcul des factures qui reprenne le code du bouton creer facture (sauf qu'au lieu de demander la création d'un feuillet, tu demandes à la macro d'activer le feuillet existant)

- modifier le code de creer facture et remplacer les valeurs de lignes par des formules renvoyant aux cellules correspondantes.

exemple
with sheets(nom du feuillet)

.[B15].FormulaR1C1 = "=Commande!R9C7" 'inscrit =G9 en B15 de la facture correspondant à la ligne 9

Essaye de programmer, on corrigera si ça fonctionne pas, là je n'ai plus le temps (j'ai une vie de famille)

a+
 

skoobi

XLDnaute Barbatruc
Re : Créer des feuilles a partir d'un bouton

Re bonsoir,

voici une autre proposition avec comme nom de facture: "N° Fact nom première lettre prénom".
Si la facture existe, elles est écrasée.
 

Pièces jointes

  • Véhicule marche v4.zip
    49.7 KB · Affichages: 104

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

salut skoobi,

je viens d'essayé ta dernière version, il y a du mieux.
Seulement si tu click sur le bouton créer facture puis que tu ajoute ou supprime un nom (avec l'userform) tu verras que des factures sont en doubles.
fait l'essai, tu verras

je ne sait pas si on peut solutionner ça car ma demande devient très compliquer.

dans l'attente de te lire

A+
 

skoobi

XLDnaute Barbatruc
Re : Créer des feuilles a partir d'un bouton

Voici le code modifié en conséquence:

Code:
Private Sub Cb_Facture_Click()
Dim Nom As Range, Lig As Long, Rep As Integer, i As Long

Rep = MsgBox("Veuillez confirmer.", vbQuestion + vbYesNo, "Faire les calculs?")
If Rep = vbNo Then Exit Sub
Application.ScreenUpdating = False
'on efface les factures existantes
If Sheets.Count > 3 Then
  Application.DisplayAlerts = False
  For i = Sheets.Count To 4 Step -1
    Sheets(i).Delete
  Next
  Application.DisplayAlerts = True
End If
Sheets("model facture").Visible = True
'pour chaque nom de la cellule A9 à la dernière cellule non vide colonne A.
For Each Nom In Range("A9", [A8].End(xlDown))
  Lig = Nom.Row
'  On Error Resume Next
'ici on test si la feuille existe. Elle est créée dans le cas contraire.
'  Sheets(Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1)).Activate
'  If Err.Number <> 0 Then
    Sheets("model facture").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1)
'  End If
'  On Error GoTo 0
  With Sheets(Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1))
'copie vers la facture
'Lig correspond à la ligne du nom de la feuille "Commande"
    .[G4].Value = Range("A" & Lig).Value
    .[G5].Value = Range("B" & Lig).Value
    .[A10].Value = [B3].Value
    .[B15].Value = Range("G" & Lig).Value
    .[B17].Value = Range("H" & Lig).Value
    .[B19].Value = Range("I" & Lig).Value
    .[B25].Value = Range("N" & Lig).Value
    .[B30].Value = Range("S" & Lig).Value
    .[D21].Value = Range("T" & Lig).Value
  End With
Next Nom
Application.ScreenUpdating = True
Sheets("model facture").Visible = False
Sheets("Commande").Activate
End Sub
 

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

salut skoobi, lsalut ledzepfred,

ça marche supper.
une petite chose, un creer une nouvelle feuille que j'ai appellé "recap" et quand je lance le recalcul, elle s'efface, y at'il un moyen que cette feuille ne se supprime pas ?

A+
 

skoobi

XLDnaute Barbatruc
Re : Créer des feuilles a partir d'un bouton

Re bonjour,

Oui.
Je ne t'ais pas dis que en fait la macro supprime les feuilles de la dernière à la 4eme:
For i = Sheets.Count To 4 Step -1
Donc, si tu ajoutes juste cette feuille à coté de la feuille caché (ou avant les factures), modifie comme suit:
Code:
If Sheets.Count > [B][COLOR=blue]4[/COLOR][/B] Then
  Application.DisplayAlerts = False
  For i = Sheets.Count To [COLOR=blue][B]5[/B][/COLOR] Step -1
    Sheets(i).Delete
  Next
  Application.DisplayAlerts = True
End If
Tu vois le principe?
Si tu comptes ajouter d'autres feuilles après les factures, il faudra revoir le code (c'est faisable).

Bon après-midi.
 
Dernière édition:

ledzepfred

XLDnaute Impliqué
Re : Créer des feuilles a partir d'un bouton

Salut cjwelch, skoobi,

dans un précédent message je t'indiquais d'inclure dans le code de la macro cette ligne dans le with.. end with: .[G8].value=format(Date,"[$-F800]dddd dd mmmm yyyy")
ce qui permet de mettre la date d'édition de chaque facture au format (jeudi 25 septembre 2008). J'ai remarqué que dans la version v4, cette ligne n'y est pas. (c'est juste au cas où tu aurais zappé)

a+
 

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

salut skoobi, salut ledzepfred,

merci de votre qui m'a été précieuse

led, j'ai vue pour le format date, c'était un fichier d'essai, mon fichier lui inclura ta remarque sur la date et sur la protection.

merci encore
 

ledzepfred

XLDnaute Impliqué
Re : Créer des feuilles a partir d'un bouton

heureux d'avoir pu un peu contribué.

tous les honneurs reviennent toutefois à Monsieur Skoobi et je dis bien Monsieur, je suis très impressioné par les userforms filtrer et trier un tableau
chapeau bas maitre!!
 

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

re

maitre skoobi, une dernière petite question
ou faut 'il mettre le code pour déproteger la feuille mais aussi le classeur (pour le classeur je ne connait pas le code en revanche)
et bien entendu ou il faut les rajouter pour reproteger la feuille et le classeur

merci
 

skoobi

XLDnaute Barbatruc
Re : Créer des feuilles a partir d'un bouton

Re Padawan :D,

pour le classeur je ne connait pas le code en revanche)
L'enregistreur de macro est très utile;).

pour l'emplacement:

Code:
Private Sub Cb_Facture_Click()
Dim Nom As Range, Lig As Long, Rep As Integer, i As Long

Rep = MsgBox("Veuillez confirmer.", vbQuestion + vbYesNo, "Faire les calculs?")
If Rep = vbNo Then Exit Sub
Application.ScreenUpdating = False
[COLOR=Blue][B]'ici le code pour déprotéger le classeur[/B][/COLOR]
'on efface les factures existantes
[B][COLOR=Blue][/COLOR][/B]If Sheets.Count > 3 Then
  Application.DisplayAlerts = False
  For i = Sheets.Count To 4 Step -1
    Sheets(i).Delete
  Next
  Application.DisplayAlerts = True
End If
Sheets("model facture").Visible = True
'pour chaque nom de la cellule A9 à la dernière cellule non vide colonne A.
For Each Nom In Range("A9", [A8].End(xlDown))
  Lig = Nom.Row
'  On Error Resume Next
'ici on test si la feuille existe. Elle est créée dans le cas contraire.
'  Sheets(Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1)).Activate
'  If Err.Number <> 0 Then
    Sheets("model facture").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1)
'  End If
'  On Error GoTo 0
  With Sheets(Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1))
'copie vers la facture
[B][COLOR=Red]'ici le code pour déprotéger la feuille facture créé[/COLOR][/B]
[B][COLOR=Red]  .Unprotect blablabla[/COLOR][/B] 'remplacer blablabla uniquement
'Lig correspond à la ligne du nom de la feuille "Commande"
    .[G4].Value = Range("A" & Lig).Value
    .[G5].Value = Range("B" & Lig).Value
    .[A10].Value = [B3].Value
    .[B15].Value = Range("G" & Lig).Value
    .[B17].Value = Range("H" & Lig).Value
    .[B19].Value = Range("I" & Lig).Value
    .[B25].Value = Range("N" & Lig).Value
    .[B30].Value = Range("S" & Lig).Value
    .[D21].Value = Range("T" & Lig).Value
[B][COLOR=Blue]'ici le code pour protéger la feuille facture
     .Protect blablabla 'remplacer blablabla uniquement
[/COLOR][/B]  End With

Next Nom
Application.ScreenUpdating = True
Sheets("model facture").Visible = False
Sheets("Commande").Activate
[COLOR=Blue][B]'ici le code pour protéger le classeur[/B][/COLOR]
End Sub

Il n'y a pas besoin de déprotéger les feuilles factures avant leur suppression.
Par contre si la feuille modele est protégée, il faut désactiver la copie avant de pouvoir écrire les données (emplacement en rouge)

Voili voilou
 

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

re skoobi,

juste pour info, j'ai trouvé les codes pour le classeur:

ActiveWorkbook.Unprotect Password:="tralala"
........
ActiveWorkbook.Protect Password:="tralala", structure:=True

seulement ces codes me renvoi vers des messages d'erreur.
donc, j'ai inséré dans la macro seulement ActiveWorkbook.Unprotect
puis dans la feuille This WorkBook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Ply").Enabled = True
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CommandBars("Ply").Enabled = False
End Sub


Et ça fonctionne
 

cj welch

XLDnaute Occasionnel
Re : Créer des feuilles a partir d'un bouton

Envoyé par cj welch
salut skoobi, tu vas bien.

je m'escuse de t'importuner mais j'ai petit problème avec la commande que tu m'as gentillement réalisé.
En effet, de temps en temps, j'ai un message d'erreur qui apparait et qui me renvoi sur :
ActiveSheet.Name = Lig - 8 & " Fact " & Nom.Value & Left(Range("B" & Lig).Value, 1). Et excel affiche la feuille model et en plus il creait 1 feuille model 2, je ne sais pas pourquoi.
j'ai remarqué dans vba projet ou il y a la liste des feuilles, qu'un feuille qui ne doit pas s'effacer est positionné à la fin, je ne sait pas si cela à un conséquence.

Si tu pouvais jetter un oeil ce serait super,

merci
 

Discussions similaires

Réponses
16
Affichages
525

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote