création de feuille

the jeremie

XLDnaute Nouveau
Bonjour, je calle sur une programmation d'un fichier de gestion. etant débutant, mon code n'est pas forcément le plus adapté mais j'essaie de faire pour le mieux.

j'ai une liste de nom dans une page. Je tri cette liste par ordre alphabétique puis ensuite je veux copier la feuille ressource et la renommé par le nom de l'opérateur et faire cela pour chaque nom de ma liste
Si la feuille existe déja, je veux simplement afficher un message le précisant et ne pas créer de doublons ni la remplacer.

j'ai fait pour cela un code, mais il m'indique a chaque fois que la feuille existe

Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
On Error Resume Next
FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function

Sub affichage_feuille()



Dim l As Integer
l = 4
Sheets("données").Select

' tri de la liste

Range("D1:E102").Select
ActiveWorkbook.Worksheets("Données").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Données").Sort.SortFields.Add Key:=Range("D2: D102" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Données").Sort
.SetRange Range("D1: E102")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

For RESSOURCE = 2 To 100



If Cells(RESSOURCE, 4).Value = "" Then
Else

If FeuilleExiste(ThisWorkbook, "RESSOURCE") Then
MsgBox "la feuille existe déjà pour " & Cells(RESSOURCE, 4).Value

Else

Sheets("RESSOURCE").Copy After:=Sheets(l)
ActiveSheet.Name = Sheets("Données").Cells(RESSOURCE, 4).Value
l = l + 1

End If


End If
Next RESSOURCE

End Sub

Si vous voyez ce qui peut dérailler, je suis preneur de toutes explications. Merci d'avance
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : création de feuille

Bonjour The Jérémie, bonjour le forum,

Ci-dessous ton code modifié. La fonction FeuilleExiste n'a plus lieu d'être. J'ai commenté la partie tri car elle ne fonctionne pas sur ma version 2003. Tu enlèveras les commentaires :
Code:
Sub affichage_feuille()
Dim l As Integer
Dim r As Byte 'déclare la variable r
Dim o As Object 'déclare la variable o (Onglet

l = 4
With Sheets("données") 'prend en compte l'onglet "données"
    .Select 'sélectionne l'onglet

    '' tri de la liste
    '.Range("D1:E102").Select
    'ActiveWorkbook.Worksheets("Données").Sort.SortFiel ds.Clear
    ''ActiveWorkbook.Worksheets("Données").Sort.SortFiel ds.Add Key:=Range("D2: D102"), _
    '    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    'With ActiveWorkbook.Worksheets("Données").Sort
         '.SetRange Range("D1: E102")
         '.Header = xlYes
         '.MatchCase = False
         '.Orientation = xlTopToBottom
         '.SortMethod = xlPinYin
         '.Apply
    'End With

    For r = 2 To 100 'boucle de 2 à 100
        If .Cells(r, 4).Value <> "" Then 'condition 1 : si la cellule ligne r colonne D n'est pas vide
            On Error Resume Next 'gestion des erreurs (passe à la ligne suivante en cas d'érreur)
            Set o = Sheets(.Cells(r, 4).Value) 'définit l'onglet o (génère une erreur si l'onglet n'existe pas)
            If Err <> 0 Then 'condition 2 : si une ereur a été générée
                Err = 0 'annule l'erreur
                Sheets("RESSOURCE").Copy After:=Sheets(l) 'copie l'onglet "RESSOURCE" est le positionne après l
                ActiveSheet.Name = .Cells(r, 4).Value 'nomme l'onglet
                l = l + 1 'incrémente l
            Else 'sinon (condition 2)
                MsgBox "la feuille existe déjà pour " & .Cells(r, 4).Value 'message
            End If 'fin de la condition 2
            On Error GoTo 0 'annule la gestion des erreurs
        End If 'fin de la condition 1
    Next r 'prochaine valeur de la boucle
End With 'fin de la prise en compte de l'onglet "données"
End Sub
J'ai aussi modifié le nom de la variable ressource par r pour éviter les confusions avec l'onglet "RESSOURCE".
 

the jeremie

XLDnaute Nouveau
Re : création de feuille

Merci pour ta proposition.

Par contre, lorsque j'exécute la macro, j'ai une erreur de syntaxe pour cette partie la:

ActiveWorkbook.Worksheets("Données").Sort.SortFiel ds.Add Key:=Range("D2: D102"_
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

il met surligne "Key"
 

Statistiques des forums

Discussions
312 496
Messages
2 088 978
Membres
103 996
dernier inscrit
KB4175