Nommer automatiquement les plages successives de cellules non vides

Bonjour,

Je souhaite grâce à un code VBA attribuer de façon automatique des noms (exemple: plage_1, plage_2, plage_3, etc...) à des plages de cellules non vides dans une colonne et ce, dans un ordre chronologique.

Je joins le fichier ci-dessous pour illustration.

11exemple3.xlsx (9.86 Ko)

Merci pour votre aide

SCSK

Bonjour,

Sub nommer()
    Dim pl As Range, pl2 As Range, n As Name, i As Long
    ' éventuellement nettoyer si le nombre de plages peut baisser
    For Each n In ThisWorkbook.Names
        If Left(n.Name, 6) = "Plage_" Then n.Delete
    Next n
    ' créer
    Set pl = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeFormulas)
    If Not pl Is Nothing Then
        For Each pl2 In pl.Areas
            i = i + 1: pl2.Name = "Plage_" & Format(i, "00")
        Next pl2
    End If
End Sub

eric

Merci Eriic,

Ça marche du tonnerre.

C'est parfait !!!

SCSK

Eriiic, encore une préoccupation sur le sujet:

Au cas où les cellules vides contiennent des formules qui renvoient vide, comment adapte-t-on le code vba que tu as donné?

Merci

SCSK

Oui, une formule ce n'est plus du vide :

Sub nommer()
    Dim pl As Range, pl2 As Range, n As Name, i As Long
    ' éventuellement nettoyer si le nombre de plages peut baisser
    For Each n In ThisWorkbook.Names
        If Left(n.Name, 6) = "Plage_" Then n.Delete
    Next n
    ' créer
    Columns(1).AutoFilter Field:=1, Criteria1:="<>"
    Set pl = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    If Not pl Is Nothing Then
        For Each pl2 In pl.Areas
            i = i + 1: pl2.Name = "Plage_" & Format(i, "00")
        Next pl2
    End If
    Columns(1).AutoFilter
End Sub

eric

Eric,

Tu es un CHEF !!!

Mille fois merci.

SCSK

Bonjour,

Une ultime sollicitation sur le sujet:

La nomination automatique des plages doit se faire dans 3 feuilles différentes (LHCI20, LHCI24 et LHCI30).

Chaque nom de plage à créer doit commencer par le nom de la feuille (comme indiqué dans le gestionnaire des noms).

Je souhaite avoir une seule macro qui s'exécute à partir de la feuille BASE et qui parcourt les 3 feuilles LHCI20, LHCI24 et LHCI30.

4classeur1.xlsm (28.06 Ko)

Merci d'avance.

SCSK

Bonjour,

termine de réfléchir et reviens quand ça sera bien mûr...

eric

Eric,

De mon coté, c'est l'ultime question.

J'ai essayé de faire cette dernière étape par moi-même depuis hier mais sans succès.

Après ça, mon projet est terminé.

Merci.

SCSK

Voilà :

Sub nommer()
    Const feuilles As String = ",LHCI20,LHCI24,LHCI30"
    Dim sh As Worksheet, pl As Range, pl2 As Range, n As Name, i As Long
    ' éventuellement nettoyer si le nombre de plages peut baisser
    For Each sh In Worksheets
        If InStr(feuilles, "," & sh.Name & ",") > 0 Then
            With sh
                For Each n In ThisWorkbook.Names
                    If Mid(n.Name, 1, Len(sh.Name) + 1) = sh.Name & "_" Then n.Delete
                Next n
                ' créer
                .Columns(1).AutoFilter Field:=1, Criteria1:="<>"
                Set pl = .[A2].Resize(.Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
                If Not pl Is Nothing Then
                    For Each pl2 In pl.Areas
                        i = i + 1: pl2.Name = sh.Name & "_" & Format(i, "00")
                    Next pl2
                End If
                .Columns(1).AutoFilter
            End With
        End If
    Next sh
End Sub

eric

Eric,

Ça fonctionne presque comme je veux, sauf que l’incrémentation des numéros sur les noms de plages devrait être réinitialisée pour chaque feuille (toujours commencer par 01 pour chaque feuille).

Merci

SCSK

Ca tu aurais pu trouver tout seul, il suffit d'ajouter i=0 juste avant For Each pl2 In pl.Areas

eric

En effet, pourquoi n'y ai-je pas pensé ?

Merci infiniment Eric.

Mon projet est terminé grâce à ton aide.

SCSK

Eric,

Il y a un bug dans le code.

Lorsque les valeurs des plages deviennent grandes, la nomination des plages devient erronée.

C'est dû à quoi ?

1classeur2.xlsm (30.03 Ko)

SCSK

Rechercher des sujets similaires à "nommer automatiquement plages successives vides"