Incrémentation en fonction des cellules voisins
Bonjour à tous,
Je suis débutant et vient pour demander une aide pour une formule spécifique où j'incrémente une valeur en fonction de ce qu'il y a dans les autres colonnes
J'ai un document ci-joint avec 3 colonnes importantes :
- La A contient un numéro d'item, la B un rang (A ou B) et la C fait office de référence
- C'est cette colonne C où je n'arrive pas à trouver une formule correcte. J'aimerais qu'elle affiche une référence sous la forme "numéro_d'item tiret rang valeur_à_incrémenter Je sais que ce n'est pas très clair donc par exemple, la première ligne serait la forme 1-A1 puis 1-A2.... sachant qu'elle reboucle à 1 à chaque nouvel item et que les A et B sont comptés séparément (par exemple la première ligne de l'item 1 avec un B reste 1-B1 qu'importe la valeur de la ligne d'avant).
Je me retrouve ainsi confronté à plusieurs problèmes. Déjà, je ne sais pas comment formuler dans excel cette séparation A/B (le seul truc que j'arrive à faire est d'augmenter mais indifféremment du A/B), c'est-à-dire que je n'arrive pas à faire l'incrémentation sur une partie seulement de la cellule. De plus, la première colonne (celle des items) comporte beaucoup de cellules fusionnées (je connais tous les problèmes liées aux cellules fusionnées et les difficultés de manipulation avec mais je suis obligé de les avoir). Enfin, je n'arrive pas à configurer le retour à 1 à chaque nouvel item (par exemple 2-A1, je n'arrive pas à le faire). Ce dernier problème peut être laissé de côté si besoin.
Pour info, le document fourni n'est qu'une version réduite, le définitif faisant plus de 5000 lignes d'où le fait que je souhaite une formule
Je sais que cela fait beaucoup de conditions et je n'arrive pas à estimer la complexité nécessaire pour ce genre de formule, j'espère donc qu'il existe une méthode assez simple pour cela
Merci d'avance (en espérant avoir été assez clair sur le problème, celui-ci étant assez brouillon à expliquer)
Merci beaucoup, c'est exactement ce qu'il me fallait (la formule rajoutée dans la colonne D me sera également très utile d'autre fois)
Bonsoir Historia et bienvenu, bonsoir DjiDji, bonsoir le forum,
Une proposition VBA si ça intéresse quelqu'un :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim Deb As String 'déclare la variable Deb (Debut)
Dim Fin As String 'déclare la variable Fin
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim Vmax As Integer 'déclare la variable VMax (Valeur Maximum)
Set O = Worksheets("Connaissances") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet O
For I = 3 To DL 'boucle 1 : sur toutes les ligne I de la ligne 3 à DL
Vmax = 0 'réinitialise la variable VMax
'définit le debut deb (cellule colonne A, tiret, cellule colonne B)
Deb = CStr(O.Cells(I, 1).MergeArea(1).Value) & "-" & O.Cells(I, "B").Value
For J = 3 To DL 'boucle 2 : sur toutes les ligne I de la ligne 3 à DL
'condition : si Deb est contenue dans la cellule de la boucle 2
If InStr(1, O.Cells(J, "C").Value, Deb, vbTextCompare) > 0 Then
Fin = CInt(Mid(Split(O.Cells(J, "C").Value, "-")(1), 2)) 'définit la Fin (texte à partir de le deuxième caractère après le tiret) / si tu avais dépassé la colonne Z j'étais marron...
If Fin > Vmax Then Vmax = Fin 'si Fin est supérieure à VMax alors VMax devient Fin
End If 'fin de la condition
Next J 'ptochaine ligne de la boucle 2
O.Cells(I, "C").Value = Deb & Vmax + 1 'renvoie dans la cellule ligne I colonne C de la boucle 1 le texte Deb et VMax plus 1
Next I 'prochaine ligne de la boucle 1
End Sub