• Initiateur de la discussion Initiateur de la discussion laplayast
  • Date de début Date de début

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 !

laplayast

XLDnaute Occasionnel
Bonjour,
Je reviens, vers vous car j'ai un problème de création de feuilles avec la macro"création modèle".A vrai dire cela fonctionne;mais avec quelques imperfections.

Lors,de la création de la nouvelle feuille est-il possible d'ajouter au nom de l'onglet,la valeur de la cellule "B11"avec incrémentation n+1;par rapport à la précédente
Est-il,possible également de tester les cellules en couleurs avant la création;afin de corriger l'oubli de remplissage.
Infos,lors de la création de n'importe quel nouveau modèle,les valeurs des cellules bleues,passent du côté des cellules jaunes;et les cellules en bleue de la nouvelle feuille devraient être vides;en attendant les données;ce qui n'est pas le cas,comment faire?

Je remercie également tous ceux,qui m'ont permis de mettre en place ce début de programme;mais je n'ai assez de connaissances en VBA.
ci-joint le fichier test
merci.laplayast@+
 

Pièces jointes

Re : création feuille

Bonsoir,
Je viens de créer,une macro qui efface les cellules bleues après la création de la feuille modèle avec un bouton.Je l'ai ajouté à la fin du code suivant;pour quelle s'exécute en automatique;mais cela ne le fait pas.
Pourriez-vous,m'aider à le mettre en place.Ci-joint le code de la macro"effacebleues" à la fin du code.
Merci à tous.laplayast@+

Option Explicit
Sub affiche1()
UserForm1.Show

End Sub

Sub creation()
Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String
Sheets("modéle").Select
With Sheets("modéle")
If .Range("D14").Value = "" Then
Call MsgBox("Vous dever indiquer le LOT ", vbInformation, Application.Name)
.Range("D14").Select
Exit Sub
End If
If .Range("H14").Value = "" Then
Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
.Range("H14").Select
Exit Sub
End If
If .Range("C28").Value = "" Then
Call MsgBox("Vous devez indiquez L'EPAISSEUR", vbInformation, Application.Name)
.Range("C28").Select
Exit Sub
End If
If .Range("H28").Value = "" Then
Call MsgBox("Vous devez indiquez LA FORCE", vbInformation, Application.Name)
.Range("H28").Select
Exit Sub
End If
End With
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
If j > i Then i = j
End If
End If
Next Sh
With Sheets("modéle")
.Copy after:=Sheets(Sheets.Count)
' On Error GoTo PbNomFeuille
ActiveSheet.Name = "modéle" & i + 1 '' référence"
End With
'
' on met les noms dans un tableau
ReDim nu(Sheets.Count)
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
nu(j) = Sh.Name
End If
End If
Next Sh
' on recopie les données de l'avant dernier dans le dernier
For j = UBound(nu) To LBound(nu) Step -1
If nu(j) <> "" Then
i = 1
If j > 1 Then
Do
If nu(j - i) <> "" Then Exit Do
i = i + 1
If i > Sheets.Count Then Exit Do ' sortie si problème
Loop

i = j - i
Call recopie(nu(i), nu(j))
Else
Call recopie("modéle", nu(j))
End If
End If
Next j
End Sub

Private Sub recopie(nomforig As String, nomfdest As String)
Dim £j As Integer
With Sheets(nomfdest)
'copier les cellules"H28 à H34 et I28 à I34,de la feuille modèle _
vers la feuille modèle1, vers les cellules "C28 à D34
For £j = 28 To 34
.Range("C" & £j).Value = Sheets(nomforig).Range("h" & £j).Value
.Range("D" & £j).Value = Sheets(nomforig).Range("i" & £j).Value
Next £j
' compléter pour les cellules roses
.Range("C11").Value = Sheets(nomforig).Range("C11").Value
If .Range("k14").Value = "" Then .Range("D14").Value = Sheets(nomforig).Range("D14").Value
If .Range("l14").Value = "" Then .Range("H14").Value = Sheets(nomforig).Range("H14").Value
.Range("I11").Value = Sheets(nomforig).Range("I11").Value
.Range("H36").Value = Sheets(nomforig).Range("D36").Value
End With
End Sub
Sub effacebleues()
'
' effacebleues Macro
' Macro enregistrée le 06/04/2009 par toto
'

'
Range("H28:I32,H25").Select
Range("H25").Activate
Selection.ClearContents
End Sub
 
Re : création feuille

Bonsoir Laplayast,

laplayast à dit:
Bonsoir,
Aucune reponse,ai-je omis un code de conduite sur le forum,je ne sais point.
Mais une réponse,m'aurait permis d'avancer.

Extrait du fil

Non, tu n'as omis aucun code de conduite! Tu as mis une pièce jointe. Bref en apparence c'est tout bon.

Perso je découvre tes deux fils que ce soir, et franchement, je suis perdu!

-> deux fils ouvert sur le même sujet, et où les questions varient! Tu as changé ton fusil d'épaule depuis? Tu as résolus ces questions seul entre temps?

-> de plus il y a quelques lignes dans ton code qui ne servent à rien du tout! C'est pour nous mettre sur une fausse piste? 😀


Procédons par ordre!!! Ta question ci-dessous, je ne l'a trouve pas très clair. Et en plus, en voyant ton fichier on comprend différemment!!!

laplayast à dit:
Lors,de la création de la nouvelle feuille est-il possible d'ajouter au nom de l'onglet,la valeur de la cellule "B11"avec incrémentation n+1;par rapport à la précédente

Pourquoi parles-tu de création de nouvelle feuille? Sauf erreur, tu veux dupliquer ta feuille modéle, et une fois cette nouvelle feuille créé, la renommé pour en faire ta feuille de travail et garder ta feuille modéle intact pour les futurs duplications?

Non?

De plus, tu veux ajouter au nom de l'onglet la valeur de la cellule "B11", jusque là je te suis, c'est clair et facile à faire, mais concernant l'incrémentation, c'est pas suffisament détaillé! Sur combien de chiffre travail tu?
Exemple : "Fact. DUPONT 1" puis "Fact DURANT 2" puis "Fact CHAZAL 3"
-> où le texte écris en bleu serait la valeur de ta cellule B11
-> où le chiffre en rouge serait la fameuse incrémentation?

A moins que tu es "Fact. DUPONT 01" puis "Fact DURANT 02" puis "Fact CHAZAL 03"

C'est à dire une incrémentation sur deux chiffres? Information importante mais non précisé!

En attendant, voici un code faisant ce que j'ai compris :
Code:
Sub FeuilleCréationRenommé()
' Macro enregistrée par Excellent

Dim i As Long

i = 1

With Sheets("modéle")

    .Select
    .Copy After:=Sheets(Sheets.Count)
End With
    
ActiveSheet().Name = Range("B11") & i


End Sub

Je n'ai pas dévoloppé l'incrémentation, juste mis i, pour te montrer l'esprit, car ne serait ce pas plus intéressant, au lieu de mettre un numéro qui veut rien dire "incrémenté", de mettre le numéro de ton document, qui je suis persuadé est numéroté et de façon incrémenté?

Deux avantages :
-> plus clair pour tes recherches futurs d'onglets
-> évite de faire deux fois la même chose mais de façon différente!

Je te laisse jetter un coup d'oeil à cela, pendant ce temps je vais jeter un coup d'oeil plus précis sur ta macro.

Bonne soirée
 
Re : création feuille

Pour mémoire, voici ta dernière macro, telle que mis dans ton autre fil (cf. message précédent pour le lien)

Code:
Sub creation()
Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String
Sheets("modéle").Select
With Sheets("modéle")
If .Range("D14").Value = "" Then
Call MsgBox("Vous dever indiquer le LOT ", vbInformation, Application.Name)
.Range("D14").Select
Exit Sub
End If
If .Range("H14").Value = "" Then
Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
.Range("H14").Select
Exit Sub
End If
If .Range("C28").Value = "" Then
Call MsgBox("Vous devez indiquez L'EPAISSEUR", vbInformation, Application.Name)
.Range("C28").Select
Exit Sub
End If
If .Range("H28").Value = "" Then
Call MsgBox("Vous devez indiquez LA FORCE", vbInformation, Application.Name)
.Range("H28").Select
Exit Sub
End If
End With
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
If j > i Then i = j
End If
End If
Next Sh
With Sheets("modéle")
.Copy after:=Sheets(Sheets.Count)
' On Error GoTo PbNomFeuille
ActiveSheet.Name = "modéle" & i + 1 '' référence"
End With
'
' on met les noms dans un tableau
ReDim nu(Sheets.Count)
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
nu(j) = Sh.Name
End If
End If
Next Sh
' on recopie les données de l'avant dernier dans le dernier
For j = UBound(nu) To LBound(nu) Step -1
If nu(j) <> "" Then
i = 1
If j > 1 Then
Do
If nu(j - i) <> "" Then Exit Do
i = i + 1
If i > Sheets.Count Then Exit Do ' sortie si problème
Loop

i = j - i
Call recopie(nu(i), nu(j))
Else
Call recopie("modéle", nu(j))
End If
End If
Next j
End Sub
 
Re : création feuille

Re,

La même macro un peu nettoyé! Et ordonné de façon plus simple à lire et comprendre!

Code:
Sub creation()

Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String

With Sheets("modéle")
   .Select

   If .[D14] = "" Then
          Call MsgBox("Vous dever indiquer le LOT ", vbInformation, Application.Name)
          Exit Sub
   End If

   If .[H14] = "" Then
          Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
          Exit Sub
   End If

   If .[C28] = "" Then
          Call MsgBox("Vous devez indiquez L'EPAISSEUR", vbInformation, Application.Name)
          Exit Sub
   End If

   If .[H28] = "" Then
         Call MsgBox("Vous devez indiquez LA FORCE", vbInformation, Application.Name)
         Exit Sub
   End If

   For Each Sh In Worksheets
      If Sh.Name <> "modéle" Then
             If InStr(Sh.Name, "modéle") > 0 Then
                   j = CInt(Replace(Sh.Name, "modéle", ""))
                   If j > i Then i = j
             End If
      End If
   Next Sh

   .Copy after:=Sheets(Sheets.Count)
   ActiveSheet.Name = "modéle" & i + 1 '' référence"

End With
...

Voici quelques astuces pour te permettre d'avancer.

Merci de nous tenir informé où tu en es, ce qu'il te manque, ce qui coince.

Bonne soirée
 
- 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
5
Affichages
142
Réponses
6
Affichages
162
Réponses
12
Affichages
342
  • Question Question
Microsoft 365 Tableau
Réponses
24
Affichages
1 K
Réponses
134
Affichages
4 K
Retour