VBA - Creation onglet : nom numerique

Nikless

XLDnaute Junior
Bonjour le Forum,

J'ai une procédure permettant de créer des onglets pour chacun de mes clients
Cela fonctionne lorsque mon critère (qui est le nom de l'onglet) est du texte.
Lorsque mon critere est un nombre cela entraine qq complications entrainant un bug de la macro : nom en doubles, pas de report des données

Fichier explicatif ci-joint.

Bien excellement,
Nikless*
 

Pièces jointes

  • Creation feuille numero.xlsm
    24.2 KB · Affichages: 133

Papou-net

XLDnaute Barbatruc
Re : VBA - Creation onglet : nom numerique

Bonjour Nickless,

Je pense qu'en modifiant ton code comme ci-dessous, tu devrais parvenir au résultat escompté :

Code:
Sub CreaFeuilles()
Dim Rep As String, Lig As Integer, f As Integer, i As Integer, j As Integer, k As Integer, N As Integer, Z As Boolean
[COLOR="Red"][B]Dim sh As Object[/B][/COLOR]

With Sheets("Modèle")
.Visible = True
.Unprotect
End With
' Création des feuilles inexistantes
With Sheets("Initial")
Lig = .Range("A65536").End(xlUp).Row
If Lig < 2 Then MsgBox "Pas de client à mettre en fiche !": Exit Sub
For f = 2 To Lig
Z = False
    [COLOR="Red"][B]For Each sh In Sheets[/B][/COLOR]
        [COLOR="Red"][B]If sh.Name = CStr(.Cells(f, 2)) Then[/B][/COLOR]
        Z = True
        End If
    [COLOR="Red"][B]Next[/B][/COLOR]
        If Z = False Then
        ....
        ....

En tout cas, j'ai testé sous XL2003 et ça fonctionne.

Espérant avoir répondu.

Cordialement.
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : VBA - Creation onglet : nom numerique

Bonsoir,

Bonsoir, papou :)

Une autre proposition :

Code:
Sub dispatch()
Dim Cel As Range, Plg As Range
Dim Clients As Object
Dim FSource As Worksheet, Sh As Worksheet
Dim It
Set Clients = CreateObject("Scripting.Dictionary")
Set FSource = Sheets("Initial")
With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
End With
For Each Sh In Sheets
    If Sh.Name <> "Initial" And Sh.Name <> "Modèle" Then Sh.Delete
Next Sh
With FSource
    .Range("A1:C" & .[A65000].End(xlUp).Row).Name = "base"
    Set Plg = .Range("B2:B" & .[B65000].End(xlUp).Row)
    For Each Cel In Plg
        Clients(Cel.Value) = Cel.Value
    Next Cel
End With
For Each It In Clients.Items
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Name = It
        .[A2] = It
        FSource.Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
        "A1:A2"), CopyToRange:=.Range("A3:B3")
    End With
Next It
End Sub

Bonne soirée
 

Nikless

XLDnaute Junior
Re : VBA - Creation onglet : nom numerique

Bonjour le Fil,

Papou, ton conseil me permet de contourner le problème des feuilles créées en double mais ne permet pas de reporter les données sur les feuilles correspondantes.

Bhbh, ton code fonctionne a merveille. Je suis fan de l'objet Dictionary.

Au plaisir de vous lire,
Nikless
 

Nikless

XLDnaute Junior
Re : VBA - Creation onglet : nom numerique

Bonjour le Fil,

Je me permets de relancer le fil car je butte sur un problème concernant le report de données sur les onglets correspondants quand mon critère est un nombre.
La procédure s'effectue correctement (créer et renommer l'onglet) mais pas de report d'infos.

Merci par avance pour votre aide,
Nikless
 

Pièces jointes

  • Creation feuille numero v2.xlsm
    28.3 KB · Affichages: 68
Dernière édition:

Nikless

XLDnaute Junior
Re : VBA - Creation onglet : nom numerique

Il suffisait tout simplement de convertir la valeur de la cellule en une chaîne de caractère.

"Posez les questions c'est déja une forme de réponses."

Code:
For k = 2 To Lig ' Report des données du commercial
            If .Name = [COLOR="Red"][B]CStr(Sheets("Initial").Cells(k, 2)) Then[/B][/COLOR]
            .Cells(N, 2) = Sheets("Initial").Cells(k, 3)
            .Cells(N, 3) = Sheets("Initial").Cells(k, 4)

Bon dimanche à tous !
Nikless
 

Discussions similaires

Statistiques des forums

Discussions
312 512
Messages
2 089 186
Membres
104 059
dernier inscrit
@kheops7991