Re : modif macro recopie modele à la suite
Bonjour amis Exceliens Excellienne
C’est presque bon
Apres de multiples essais, j’en suis arrivé à ce code, mais il reste un bug.
J’ai rajouté du code afin de supprimer les premières lignes vide du modèle recopié,mais le code continue d’effacer les premières lignes quand je mets un nouveau code,comment faire pour que ce code s’exécute une seule fois à la création de l’onglet .
Merci de m’aider
Bon week end à tous
Le code :
Option Explicit
Dim Sht As Worksheet
Sub creation_onglets()
Dim Cel As Range, DerLig As Long, Lig As Long
Dim VTitre As String, NbTitre As Integer, NbLigSom As Integer
Application.DisplayAlerts = False
'Application.ScreenUpdating = False
' Nombre de lignes par sommaire
NbLigSom = 10
With Sheets("SOMMAIRE")
DerLig = .Range("C" & Rows.Count).End(xlUp).Row
For Each Cel In .Range("B3:B" & DerLig)
' Si la cellule de la colonne B contient une valeur
If Cel.Value <> "" Then
NbTitre = 0 ' Mettre à ZERO le nombre de titre
On Error Resume Next
' Fait une copie de la feuille modèle
Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
Set Sht = Sheets(Sheets.Count)
' Renomme la feuille de la valeur de la cellule
Sht.Name = Cel.Text
' Si une erreur se produit, c'est que la feuille existe déjà
' Alors on la supprime
If Err.Number <> 0 Then
Sht.Delete
Set Sht = Sheets(Cel.Value)
End If
On Error GoTo 0
End If
' Inscrire les titres ICI
VTitre = Cel.Offset(0, 1)
If VTitre <> "" Then
Sht.Activate
If LigFTitre(VTitre) = 0 Then
Lig = Sht.Range("C" & Rows.Count).End(xlUp).Row + 3
If Lig = 2 Then Lig = 1
Sheets("MODELE").Range("1:" & NbLigSom).Copy Destination:=Sht.Range("A" & Lig)
Sht.Range("A" & Lig + 2).Value = VTitre
' Créer le Lien Hypertexte
ActiveSheet.Hyperlinks.Add Anchor:=Cel.Offset(0, 1), Address:="", SubAddress:= _
"'" & Sht.Name & "'!A" & Lig, TextToDisplay:=VTitre
End If
End If
Next Cel
End With
'efface 4 lignes si A1;A2;A3;A4 vide
Dim intI As Integer, intArret As Integer
intI = 1
'inser le nombre de ligne à suprimer en partant du haut
intArret = 4
Do While intI < intArret
'indiquer le numéro de la colonne ou le teste dois se dérouler
If Cells(intI, 1) = 0 Then
Rows(intI).Delete
intArret = intArret - 1
Else
intI = intI + 1
End If
Loop
Rows("1:1").Select
Selection.Delete Shift:=xlUp
End Sub
Function LigFTitre(VSearch As String)
LigFTitre = 0
On Error Resume Next
LigFTitre = Cells.Find(What:=VSearch, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
On Error GoTo 0
End Function