Incrémentation avec conditions (sans VBA)

OliVBB

XLDnaute Nouveau
Bonjour,

Après pas mal de recherche, je me tourne vers vous afin de trouver une solution à mon petit problème. J'aimerais incrémenter des séries de chiffres un peu comme pour une table des matières.

En gros en fonction (conditions) du contenu (chaine de caractère) d'une cellule ET du "rang" de cette cellule dans la colonne j'aimerais créer une numérotation du type 1.1.1, 1.1.2 ...

Ex.:
  • Colonne A:A -> Valeurs possibles : LOT, CHAPITRE, ARTICLE (
Je peux avoir plusieurs LOT
Un LOT peut contenir (avoir en dessous de lui dans la colonne A:A) plusieurs CHAPITRE
Un CHAPITRE peut contenir (avoir en dessous de lui dans la colonne A:A) plusieurs ARTICLE
  • Colonne B:B -> Numérotation incrémentée en fonction des valeurs de la colonne A:A ET du nombre de chaines de caractères identiques précédentes.

Pour LOT par exemple, la première fois dans la colonne A:A, cela devrait indiquer en colonne B : LOT 1 puis LOT2 la deuxième que le mot LOT est rencontré (son rang ?).
Ensuite pour CHAPITRE cela doit reprendre le numéro du LOT qui le précède et ajouter 1 (son rang ?) au premier, 2 au deuxième, etc.
Et pour ARTICLE, la numérotation est composée du numéro du LOT, puis du numéro du chapitre et enfin de son rang (?) dans la liste.


Capture d’écran 2020-01-30 à 16.40.41.png


J'ai fait un petit fichier du résultat que je cherche à obtenir, j'espère que ça vous aidera.

D'avance merci pour votre aide
 

Pièces jointes

  • Incrementation-Conditions.xlsx
    9.6 KB · Affichages: 18

job75

XLDnaute Barbatruc
Bonjour OliVBB, JHA,

Pas encore regardé la solution de JHA, je poste quand même la mienne.

Dans le fichier joint j'utilise 3 colonnes auxiliaires A B C (à masquer), voyez les formules en A2 B2 C2.

Formule en E2 :
Code:
=REPT(RECHERCHE(9^9;A$1:A2);ESTTEXTE(D2))&SIERREUR(REPT("."&RECHERCHE(9^9;B$1:B2);(D2="CHAPITRE")+(D2="ARTICLE"));"")&REPT("."&C2;D2="ARTICLE")
MFC pour les couleurs des colonnes D et E.

A+
 

Pièces jointes

  • Incrementation-Conditions(1).xlsx
    12.8 KB · Affichages: 19

CISCO

XLDnaute Barbatruc
Bonsoir à tous, bonsoir Job75 et JHA

Une autre possibilité tordue en pièce jointe, sans colonne intermédiaire, mais avec une formule matricielle à rallonge...

@ plus
 

Pièces jointes

  • Incrementation-Conditions.xlsx
    10.7 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonjour OliVBB, JHA, CISCO, le forum,

Avec les 3 colonnes auxiliaires il y a beaucoup plus simple, voyez ce fichier (2) avec :

- en A2 =N(A1)+(D2=A$1)

- en B2 =(D2<>A$1)*(N(B1)+(D2=B$1))

- en C2 =(D2<>A$1)*(D2<>B$1)*(N(C1)+(D2=C$1))

- en E2 =SI(ESTVIDE(D2);"";A2&REPT("."&B2;SIGNE(B2))&REPT("."&C2;SIGNE(C2)))

Bonne journée.
 

Pièces jointes

  • Incrementation-Conditions(2).xlsx
    11.6 KB · Affichages: 6

job75

XLDnaute Barbatruc
Dans ce fichier (3) j'ai mis le tableau sous forme de tableau structuré.

De cette manière les formules se recopient automatiquement.

Pour agrandir le tableau en sautant une ligne entrez un espace en colonne D.

La formule en E2 est un peu modifiée :
Code:
=SI(SUPPRESPACE(D2)="";"";A2&REPT("."&B2;SIGNE(B2))&REPT("."&C2;SIGNE(C2)))
Edit : j'avais oublié de mettre les polices blanches dans la MFC.
 

Pièces jointes

  • Incrementation-Conditions(3).xlsx
    13 KB · Affichages: 19
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour OliVBB, JHA, CISCO, le forum,

Il me paraît intéressant de comparer les durées d'exécution des diverses solutions.

Pour cela j'ai recopié le tableau sur 29 000 lignes, voici les durées chez moi sur Excel 2019 pour la recopie des formules :

- JHA post #2 => 24 secondes sur cellules vides - 67 secondes sur cellules déjà remplies

- CISCO post #5 => 111 secondes pour les 2 premières solutions, 105 secondes pour la 3ème

- job75 post #3 => 4 secondes sur cellules vides - 4 secondes sur cellules déjà remplies

- job75 post #8 => 0,6 seconde sur cellules vides - 0,8 seconde sur cellules déjà remplies.

Les formules sont recopiées par macro avec la méthode plage2 = plage1.Formula sauf pour la 3ème solution de CISCO (colonne E) où la méthode AutoFill est utilisée car elle nécessite une validation matricielle.

Bonne journée.
 

job75

XLDnaute Barbatruc
Pour clore correctement cette discussion voici une solution VBA même si ça ne vous intéresse pas.

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, resu() As String, i As Long, j As Long, x As String, k As Integer
With UsedRange
    tablo = .Resize(, 2) 'matrice plus rapide, au moins 2 colonnes
    ReDim resu(1 To UBound(tablo), 1 To 1)
    For i = 1 To UBound(tablo)
        If tablo(i, 1) <> "" Then
            For j = i - 1 To 1 Step -1
                If tablo(j, 1) <> "" Then
                    x = resu(j, 1) & "."
                    k = InStr(x, ".")
                    Select Case tablo(i, 1)
                        Case "LOT"
                            resu(i, 1) = Val(Left(x, k - 1)) + 1
                        Case "CHAPITRE"
                            resu(i, 1) = Left(x, k) & Val(Replace(Mid(x, k + 1), ".", "#")) + 1
                        Case "ARTICLE"
                            k = InStr(k + 1, x, ".")
                            resu(i, 1) = Left(x, k) & Val(Mid(x, k + 1)) + 1
                    End Select
                    Exit For
                End If
            Next j
            If tablo(i, 1) = "LOT" And resu(i, 1) = "" Then resu(i, 1) = 1 'LOT 1
        End If
    Next i
    '---restitution---
    Application.EnableEvents = False
    .Columns(1) = tablo
    .Columns(2) = resu
    Application.EnableEvents = True
End With
End Sub
Elle se déclenche automatiquement quand on modifie une cellule quelconque.

Sur un tableau de 29 000 lignes la durée d'exécution chez moi est de 0,10 seconde.

Comme il n'y a plus de formules il n'est plus nécessaire que le tableau soit un tableau structuré.
 

Pièces jointes

  • VBA Incrementation(1).xlsm
    270.1 KB · Affichages: 13

Mattttttttttrix

XLDnaute Junior
Bonjour,

Je cherche à faire quelque chose de similaire et la dernière mouture correspond à mon besoin à quelques détails.

Premier sujet, j'ai besoin de 5 niveaux :
  • 1 - Niveau 1
  • 1 - 1 - Niveau 2
  • 1 - 1 - 1 - Niveau 3
  • 1 - 1 - 1 - 1 - Niveau 4
  • 1 - 1 - 1 - 1 - 1 - Niveau 5
  • "Post"

Le code de la Macro dépasse mes compétences en VBA, je ne parviens pas à le comprendre...


Second sujet, J'ai des "niveaux bis" qui sont des sous-totaux. Exemple :
1 - Niveau 1
1 - 1 - Niveau 2
1 - 1 - Sous-total niveau 2
1 - 2 - Niveau 2
1 - 2 - Sous-total niveau 2
Dans le dernier fichier de @job75 ,la colonne A est la colonne de renseignement. La colonne B, est le résultat, j'aurai besoin que la colonne C soit le "résultat bis"


Troisième sujet, ce que j'appelle le "post" est être intégré en niveau 2, 3 ,4, 5 ou 6. Il n'y a pas de hiérarchie. Je le précise car il y aura quand même un renseignement en colonne A qui pourrait (ou pas) parasiter le reste.


Quatrième sujet, la MFC.
C'est quelque chose que j'utilise très régulièrement depuis 2010 et je viens de découvrir avec un énorme étonnement qu'il n'est pas possible d'agir sur la taille du texte ainsi que sur sa police...
Je tourne sous Excel2010 (oui, je sais, je dois changer), est-ce que les versions plus récentes traitent mon besoin ?


Merci d'avance aux génies du Code ;);)
 

job75

XLDnaute Barbatruc
Bonjour Mattttttttttrix,

Votre affaire est beaucoup trop compliquée : sur ce fil on traite 3 niveaux et ce n'est pas simple.

Pour la police des MFC sur Excel 2019 on peut modifier les caractères Gras/Italique et la couleur.

A+
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 099
Membres
112 661
dernier inscrit
ceucri