Numérotation selon critères multiple
Bonjour,
Je débute sur les fonction et VBA mais je n'arrive pas à numéroter des lignes selon différents critères.
Dans l'onglet "Etat des stocks" en colonne J, je souhaite numéroter de façon logique mes articles selon les critères des colonnes B, C, D, E, F, G, H, I. Si ces critères existent déjà remettre le numéro, sinon mettre le numéro qui suit.
Soit en colonne J cela devrait donner:
1
1
1
1
1
1
1
1
2
2
2
2
Je joins le fichier. Je n'ai pas trouver de réponses dans le forum.
Merci d'avance pour votre aide.
Ana
Bonjour,
=SI(A2=A1;N(J1);N(J1)+1)En J2, et tirer sur la colonne.
Sous réserve de compréhension de ce que tu veux...
Cordialement.
Bonjour,
Je ne comprends pas comment tu passes de "1" à "2" puisque à la 3e ligne des données, c'est déjà <> des 2 précédantes...
P.
Bonjour et merci pour vos réponses.
Mais je pense que je n'arrive pas à exprimer comment je souhaite faire ma numérotation.
J'aimerais que la numérotation recommence à 1 pour chaque saison/créateur/catégorie/désignation différente et non avoir une suite.
L'objectif étant de créer ma référence avec avec concatener code article+numéro article (à créer) + code couleur
Merci d'avance,
Ana
Pour être plus clair l'idée est d'avoir pour telle saison de telle créateurj'ai:
1 référence Top 1 en taille S
La même référence Top 1 en taille M
1 référence Robe 1 en taille 36
La même référence Robe 1 en taille 38
1 autre référence Top 2 en taille 36
La même autre référence Top 2 en taille 38
La numérotation que je cherche à faire est donc 1,1, 1, 1, 2, 2
Est-ce plus clair?
Merci
MFerrand a écrit :Bonjour,
=SI(A2=A1;N(J1);N(J1)+1)En J2, et tirer sur la colonne.
Sous réserve de compréhension de ce que tu veux...
Cordialement.
Bonjour et merci pour vos réponses.
Mais je pense que je n'arrive pas à exprimer comment je souhaite faire ma numérotation.
J'aimerais que la numérotation recommence à 1 pour chaque saison/créateur/catégorie/désignation différente et non avoir une suite.
L'objectif étant de créer ma référence avec avec concatener code article+numéro article (à créer) + code couleur
Merci d'avance,
Ana
Pour être plus clair l'idée est d'avoir pour telle saison de telle créateurj'ai:
1 référence Top 1 en taille S
La même référence Top 1 en taille M
1 référence Robe 1 en taille 36
La même référence Robe 1 en taille 38
1 autre référence Top 2 en taille 36
La même autre référence Top 2 en taille 38
La numérotation que je cherche à faire est donc 1,1, 1, 1, 2, 2
Est-ce plus clair?
Merci
C'est sans doute très compréhensible pour toi,
Alors crée ta référence, définis comment on met des numéros à partir de ces références, simule le résultat attendu. Si les critères que tu définis pour numéroter sont identifiables dans le tableau, on y parviendra sans avoir à se préoccuper de ce que cela représente à tes yeux...
Cordialement.
MFerrand a écrit :C'est sans doute très compréhensible pour toi,
mais pas pour moi, et je n'ai aucune intention que ça le devienne ! Alors crée ta référence, définis comment on met des numéros à partir de ces références, simule le résultat attendu. Si les critères que tu définis pour numéroter sont identifiables dans le tableau, on y parviendra sans avoir à se préoccuper de ce que cela représente à tes yeux...
Cordialement.
Je me sens moins seul
Bonsoir,
Bonsoir MFerrand,
C'est l'éclipse qui te rend de mauvaise humeur ?
Cdlt.
MFerrand a écrit :C'est sans doute très compréhensible pour toi,
mais pas pour moi, et je n'ai aucune intention que ça le devienne ! Alors crée ta référence, définis comment on met des numéros à partir de ces références, simule le résultat attendu. Si les critères que tu définis pour numéroter sont identifiables dans le tableau, on y parviendra sans avoir à se préoccuper de ce que cela représente à tes yeux...
Cordialement.
Bon plus de représentation à mes yeux
j'ai fait un simul à la mano sur les premières références.
Peut-être est-ce plus clair?
Merci,
Salut Patrick ! J'avais un doute qui s'est confirmé !
Salut Jean-Eric ! Tu fais erreur, je ne suis nullement de mauvaise humeur ! Je suis même encore un peu endormi...
C'était juste une mise au point naturelle... Excel ça fait déjà pas mal de connaissance à emmagasiner, on ne peut décemment ajouter les connaissances des arcanes des multiples métiers des intervenants et demandeurs ! Il faut traduire en éléments Excel communs.
Bonne soirée (je vois que la journée commence à tirer à sa fin).
Si tu n'explicites pas pourquoi 1 (critère), pourquoi 2 (critère) ? je ne vois pas sur quoi on doit s'appuyer !
Il semble que tu renumérotes à partir de 1 pour chaque créateur ?
Mais sans critères précis...
MFerrand a écrit :Salut Patrick ! J'avais un doute qui s'est confirmé !
Salut Jean-Eric ! Tu fais erreur, je ne suis nullement de mauvaise humeur ! Je suis même encore un peu endormi...
C'était juste une mise au point naturelle... Excel ça fait déjà pas mal de connaissance à emmagasiner, on ne peut décemment ajouter les connaissances des arcanes des multiples métiers des intervenants et demandeurs ! Il faut traduire en éléments Excel communs.
Bonne soirée (je vois que la journée commence à tirer à sa fin).
Si tu n'explicites pas pourquoi 1 (critère), pourquoi 2 (critère) ? je ne vois pas sur quoi on doit s'appuyer !
Il semble que tu renumérotes à partir de 1 pour chaque créateur ?
Mais sans critères précis...
Bonjour,
Les critères sont si B2 existe sur la conne B, C2 existe sur la colonne C et si D2 existe sur la colonne D et si E2 existe sur la colonne E et si F2 existe sur la colonne F alors je recherche en colonne J le numéro existant et je le copie. Si seulement B2, C2, et F2 sont vérifiés je recherche en colonne J la valeur et j'ajoute 1. Et sinon je recommence la numérotation à 1.
Est-ce plus compréhensible?
Merci
Bonjour,
C'est interprétable !
Formules ? A base de fonctions classiques, comme de fonctions personnalisées, cela risque de générer des recalculs fréquents qui affecteraient l'utilisation du classeur...
Je vois deux possibilités à tenter :
- soit macro, exécutable sur demande, qui recalculerait les numéros d'articles de la feuille...
- soit fonction personnalisée, mais qui ne recalculerait pas la feuille à chaque fois, et consulterait un tableau (à stocker sur une feuille éventuellement masquée) pour générer le numéro ; si le numéro ne peut être généré (références nouvelles), une procédure d'appoint complèterait le tableau avec les nouvelles références, qui permettront à la fonction de générer le numéro.
Choix à faire... ? Je ne vais de toute façon pas me lancer tout de suite dans l'écriture.
Cordialement.
Bon ! En colonne J lignes 10 à 13 tu as noté la valeur 2.
Or, pour ces 4 lignes B, C et F sont bien identiques, mais si la valeur est aussi identique pour la colonne D, ce n'est plus le cas pour la colonne E, donc les lignes 12 et 13 auraient dû prendre la valeur 3, selon tes indications :
Les critères sont si B2 existe sur la conne B, C2 existe sur la colonne C et si D2 existe sur la colonne D et si E2 existe sur la colonne E et si F2 existe sur la colonne F alors je recherche en colonne J le numéro existant et je le copie. Si seulement B2, C2, et F2 sont vérifiés je recherche en colonne J la valeur et j'ajoute 1. Et sinon je recommence la numérotation à 1.
Je me fie donc aux indications qui conduisent à faire du libellé résultant B C F une série numérotable de 1 à x, la numérotion dans la série étant réalisée sur la base d'un libellé résultant D E.
Je termine et je livre mon duo Proc. d'initialisation - Fonction.
Ça m'a l'air de fonctionner comme prévu !
Tu vérifieras.
Fonction que j'ai tout bêtement appelée NUMART :
Function NUMART()
Dim SCrCat$, rFcc$, iC%, i%, k%
'Application.Volatile
iC = Application.ThisCell.Row
With ActiveSheet
For k = 2 To 6
If .Cells(iC, k) = "" Then
NUMART = ""
Exit Function
End If
Next k
SCrCat = .Cells(iC, 2) & .Cells(iC, 3) & .Cells(iC, 6)
rFcc = .Cells(iC, 4) & .Cells(iC, 5)
End With
On Error GoTo init
With [_SCC]
For k = 1 To .Columns.Count
If .Cells(1, k) = SCrCat Then Exit For
Next k
If k <= .Columns.Count Then
With .Cells(1, k)
Do While .Offset(i + 1) <> ""
i = i + 1
If .Offset(i) = rFcc Then
NUMART = i
Exit Function
End If
Loop
End With
End If
End With
init:
NUMART = CVErr(xlErrNA)
End FunctionIl suffit donc de mettre =NUMART() en colonne J...
Le résultat est soit un numéro : les références BCF et DE ont été trouvées,
soit N/A : les références n'ont pas été trouvées, il faut donc les réinitialiser pour qu'elles soient mises à jour (voir ci-après),
soit rien : c'est que au moins une des colonnes B C D E F n'est pas servie (et dans ce cas les références ne sont pas créées lors de l'initialisation) [NB-il y a quelques cas]
La fonction va chercher les références dans une feuille masquée nommée SCC-FC (que j'ai introduite).
Elle utilise une plage nommée de cette feuille : _SCC (voir dans le Gestionnaire de noms).
Lorsqu'il y a des N/A dans les résultats, il convient de lancer la procédure de réinitialisation ci-dessous :
Sub RéinitNumArt()
Dim dscc As Object, dfc As Object, SCrCat, rFcc, n%, i%, k%
Set dscc = CreateObject("Scripting.Dictionary")
With Worksheets("Etat des stocks")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
For k = 2 To 6
If .Cells(i, k) = "" Then Exit For
Next k
If k > 6 Then
SCrCat = .Cells(i, 2) & .Cells(i, 3) & .Cells(i, 6)
rFcc = .Cells(i, 4) & .Cells(i, 5)
If dscc.exists(SCrCat) Then
dscc(SCrCat) = dscc(SCrCat) & "|" & rFcc
Else
dscc(SCrCat) = "|" & rFcc
End If
End If
Next i
End With
Set dfc = CreateObject("Scripting.Dictionary")
k = 0
With Worksheets("SCC-FC")
.UsedRange.ClearContents
For Each SCrCat In dscc.keys
rFcc = Split(dscc(SCrCat), "|")
For i = 1 To UBound(rFcc)
dfc(rFcc(i)) = ""
Next i
k = k + 1: n = 1
.Cells(1, k) = SCrCat
For Each rFcc In dfc.keys
n = n + 1
.Cells(n, k) = rFcc
Next rFcc
dfc.RemoveAll
Next SCrCat
End With
Worksheets("Etat des stocks").Calculate
End SubCette procédure efface la feuille SCC-FC et y reconstruit toutes les références : sur la première ligne les différentes réf. BCF, et sur les lignes suivantes, pour chaque BCF les réf. DE rattachées.
La fonction NUMART n'est pas volatile (cela m'a paru préférable) mais la proc. se termine par un recalcul de la feuille Etat des stocks, ce qui devrait faire disparaître les N/A au profit d'un numéro (et éventuellement produire de nouveaux numéros si les changements ont modifié l'ordre d'inscription des références).
Dernier point : Ton fichier m'a l'air d'avoir été affecté par un problème de codage (noms de modules incorporant un "Ê"), ce pourquoi j'ai placé mon code dans un nouveau module.
Je conseillerais cependant de tout regrouper dans un seul module. Rien ne justifie l'existence de plusieurs modules standard !
Je conseillerais aussi d'épurer le code qui y figure, au moins pour en chasser tous les "Select"
Cordialement.
MFerrand a écrit :Ça m'a l'air de fonctionner comme prévu !
Tu vérifieras.
Fonction que j'ai tout bêtement appelée NUMART : Function NUMART() Dim SCrCat$, rFcc$, iC%, i%, k% 'Application.Volatile iC = Application.ThisCell.Row With ActiveSheet For k = 2 To 6 If .Cells(iC, k) = "" Then NUMART = "" Exit Function End If Next k SCrCat = .Cells(iC, 2) & .Cells(iC, 3) & .Cells(iC, 6) rFcc = .Cells(iC, 4) & .Cells(iC, 5) End With On Error GoTo init With [_SCC] For k = 1 To .Columns.Count If .Cells(1, k) = SCrCat Then Exit For Next k If k <= .Columns.Count Then With .Cells(1, k) Do While .Offset(i + 1) <> "" i = i + 1 If .Offset(i) = rFcc Then NUMART = i Exit Function End If Loop End With End If End With init: NUMART = CVErr(xlErrNA) End FunctionIl suffit donc de mettre =NUMART() en colonne J...
Le résultat est soit un numéro : les références BCF et DE ont été trouvées,
soit N/A : les références n'ont pas été trouvées, il faut donc les réinitialiser pour qu'elles soient mises à jour (voir ci-après),
soit rien : c'est que au moins une des colonnes B C D E F n'est pas servie (et dans ce cas les références ne sont pas créées lors de l'initialisation) [NB-il y a quelques cas]
La fonction va chercher les références dans une feuille masquée nommée SCC-FC (que j'ai introduite).
Elle utilise une plage nommée de cette feuille : _SCC (voir dans le Gestionnaire de noms).
Lorsqu'il y a des N/A dans les résultats, il convient de lancer la procédure de réinitialisation ci-dessous :
Sub RéinitNumArt() Dim dscc As Object, dfc As Object, SCrCat, rFcc, n%, i%, k% Set dscc = CreateObject("Scripting.Dictionary") With Worksheets("Etat des stocks") n = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 2 To n For k = 2 To 6 If .Cells(i, k) = "" Then Exit For Next k If k > 6 Then SCrCat = .Cells(i, 2) & .Cells(i, 3) & .Cells(i, 6) rFcc = .Cells(i, 4) & .Cells(i, 5) If dscc.exists(SCrCat) Then dscc(SCrCat) = dscc(SCrCat) & "|" & rFcc Else dscc(SCrCat) = "|" & rFcc End If End If Next i End With Set dfc = CreateObject("Scripting.Dictionary") k = 0 With Worksheets("SCC-FC") .UsedRange.ClearContents For Each SCrCat In dscc.keys rFcc = Split(dscc(SCrCat), "|") For i = 1 To UBound(rFcc) dfc(rFcc(i)) = "" Next i k = k + 1: n = 1 .Cells(1, k) = SCrCat For Each rFcc In dfc.keys n = n + 1 .Cells(n, k) = rFcc Next rFcc dfc.RemoveAll Next SCrCat End With Worksheets("Etat des stocks").Calculate End SubCette procédure efface la feuille SCC-FC et y reconstruit toutes les références : sur la première ligne les différentes réf. BCF, et sur les lignes suivantes, pour chaque BCF les réf. DE rattachées.
La fonction NUMART n'est pas volatile (cela m'a paru préférable) mais la proc. se termine par un recalcul de la feuille Etat des stocks, ce qui devrait faire disparaître les N/A au profit d'un numéro (et éventuellement produire de nouveaux numéros si les changements ont modifié l'ordre d'inscription des références).
Dernier point : Ton fichier m'a l'air d'avoir été affecté par un problème de codage (noms de modules incorporant un "Ê"), ce pourquoi j'ai placé mon code dans un nouveau module.
Je conseillerais cependant de tout regrouper dans un seul module. Rien ne justifie l'existence de plusieurs modules standard !
Je conseillerais aussi d'épurer le code qui y figure, au moins pour en chasser tous les "Select"
, tu y gagneras en volume de code, en lisibilité et en efficacité (rapidité d'exécution). Cordialement.
Merci beaucoup, je vais essayer cela et surtout prendre un peu de temps pour comprendre
MFerrand a écrit :Ça m'a l'air de fonctionner comme prévu !
Tu vérifieras.
Fonction que j'ai tout bêtement appelée NUMART : Function NUMART() Dim SCrCat$, rFcc$, iC%, i%, k% 'Application.Volatile iC = Application.ThisCell.Row With ActiveSheet For k = 2 To 6 If .Cells(iC, k) = "" Then NUMART = "" Exit Function End If Next k SCrCat = .Cells(iC, 2) & .Cells(iC, 3) & .Cells(iC, 6) rFcc = .Cells(iC, 4) & .Cells(iC, 5) End With On Error GoTo init With [_SCC] For k = 1 To .Columns.Count If .Cells(1, k) = SCrCat Then Exit For Next k If k <= .Columns.Count Then With .Cells(1, k) Do While .Offset(i + 1) <> "" i = i + 1 If .Offset(i) = rFcc Then NUMART = i Exit Function End If Loop End With End If End With init: NUMART = CVErr(xlErrNA) End FunctionIl suffit donc de mettre =NUMART() en colonne J...
Le résultat est soit un numéro : les références BCF et DE ont été trouvées,
soit N/A : les références n'ont pas été trouvées, il faut donc les réinitialiser pour qu'elles soient mises à jour (voir ci-après),
soit rien : c'est que au moins une des colonnes B C D E F n'est pas servie (et dans ce cas les références ne sont pas créées lors de l'initialisation) [NB-il y a quelques cas]
La fonction va chercher les références dans une feuille masquée nommée SCC-FC (que j'ai introduite).
Elle utilise une plage nommée de cette feuille : _SCC (voir dans le Gestionnaire de noms).
Lorsqu'il y a des N/A dans les résultats, il convient de lancer la procédure de réinitialisation ci-dessous :
Sub RéinitNumArt() Dim dscc As Object, dfc As Object, SCrCat, rFcc, n%, i%, k% Set dscc = CreateObject("Scripting.Dictionary") With Worksheets("Etat des stocks") n = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 2 To n For k = 2 To 6 If .Cells(i, k) = "" Then Exit For Next k If k > 6 Then SCrCat = .Cells(i, 2) & .Cells(i, 3) & .Cells(i, 6) rFcc = .Cells(i, 4) & .Cells(i, 5) If dscc.exists(SCrCat) Then dscc(SCrCat) = dscc(SCrCat) & "|" & rFcc Else dscc(SCrCat) = "|" & rFcc End If End If Next i End With Set dfc = CreateObject("Scripting.Dictionary") k = 0 With Worksheets("SCC-FC") .UsedRange.ClearContents For Each SCrCat In dscc.keys rFcc = Split(dscc(SCrCat), "|") For i = 1 To UBound(rFcc) dfc(rFcc(i)) = "" Next i k = k + 1: n = 1 .Cells(1, k) = SCrCat For Each rFcc In dfc.keys n = n + 1 .Cells(n, k) = rFcc Next rFcc dfc.RemoveAll Next SCrCat End With Worksheets("Etat des stocks").Calculate End SubCette procédure efface la feuille SCC-FC et y reconstruit toutes les références : sur la première ligne les différentes réf. BCF, et sur les lignes suivantes, pour chaque BCF les réf. DE rattachées.
La fonction NUMART n'est pas volatile (cela m'a paru préférable) mais la proc. se termine par un recalcul de la feuille Etat des stocks, ce qui devrait faire disparaître les N/A au profit d'un numéro (et éventuellement produire de nouveaux numéros si les changements ont modifié l'ordre d'inscription des références).
Dernier point : Ton fichier m'a l'air d'avoir été affecté par un problème de codage (noms de modules incorporant un "Ê"), ce pourquoi j'ai placé mon code dans un nouveau module.
Je conseillerais cependant de tout regrouper dans un seul module. Rien ne justifie l'existence de plusieurs modules standard !
Je conseillerais aussi d'épurer le code qui y figure, au moins pour en chasser tous les "Select"
, tu y gagneras en volume de code, en lisibilité et en efficacité (rapidité d'exécution). Cordialement.
Merci beaucoup c'est super