Bonjour,
Voici tout d'abord une présentation du tableau dans lequel je doit travailler :
La colonne A est tout simplement un test pour savoir si l'unité en colonne C fait partie d'un même ensemble si « VRAI » on additionne si « FAUX » changement d'ensemble on repart de 0.' A B C ' ' FAUX 0 MAX1 ' Ensenmble1 ' VRAI 10 10 ' Ensenmble1 ' VRAI 18 8 ' Ensenmble1 ' VRAI 30 12 ' Ensenmble1 ' VRAI 45 15 ' Ensenmble1 ' VRAI 61 16 ' Ensenmble1 ' VRAI 89 38 ' Ensenmble1 ' FAUX 0 MAX2 ' Ensenmble2 ' VRAI 15 15 ' Ensenmble2 ' VRAI 26 11 ' Ensenmble2 ' VRAI 47 21 ' Ensenmble2 ' VRAI 85 38 ' Ensenmble2 ' FAUX 0 MAX3 ' Ensenmble3 ' ... ... ... ' Ensenmble3 ' ... ... ... ' Ensenmble3
La colonne B est le résultat de l'addition des unités faisant partie d'un même ensemble.
Enfin en colonne C là où il y a changement d'ensemble donc « FAUX » en colonne A je dois fournir le résultat maximum de chaque ensemble.
C'est là mon problème, car selon les données entrées par l'utilisateur la taille d'un ensemble varie.
Comment pourrais-je obtenir alors les valeurs Max1, Max2, Max3... ?
Sachant que je ne sait pas non plus combien d'ensembles vont être créés.
Merci
J'ai trouvé quelque chose qui pourrait être utile, en effet j'ai un problème similaire pour ce qui est de compter le nombre d’éléments par ensemble.
Et j'ai réussit à écrire un code qui fonctionne :
Je vais donc me pencher la dessus est essayer d'adapter ce code a mon autre problème de valeur Max.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 'Numérotation automatique par rapport à la dernière saisie et comptage du nombre d'items par ensemble Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 And Target.Count = 1 Then If Target.Value <> "" And Right(Target.Offset(0, 1).Value, 3) <> "ENS" Then If Target.Offset(0, 6).Value = "" Then Target.Offset(0, 6).Value = Application.Max(Range("J:J")) + 1 ElseIf Right(Target.Offset(0, 1).Value, 3) = "ENS" Then i = 1 If (Right(Target.Offset(i, 1).Value, 3) <> "ENS") Then Target.Offset(0, 6).Value = 0 While (Right(Target.Offset(i, 1).Value, 3) <> "ENS" And Target.Row < Range("D65536").End(xlUp).Row) If (Target.Offset(i, 0).Value <> "") Then Target.Offset(0, 6).Value = Target.Offset(0, 6).Value + 1 End If i = i + 1 Wend Else Target.Offset(0, 6).Value = 0 End If Else Target.Offset(0, 6).ClearContents End If End If End Sub 'Sub 'Si une cellule Dx est sélectionnée en colonne D 'Si l'on entre une valeur non nulle et que ce n'est pas la définition du S/E 'Si la colonne J n'à pas déja de valeur affectée alors Jx = Max(J:J)+1 (indexation nouvel item) 'Sinon si définition de l'ensemble 'Initialisation variable comptage i 'Si ligne suivante (i) n'est pas une définition d'ensemble 'Initialisation valeur (Nb Items) 'Tant que la ligne suivante n'est pas une définition d'ensemble et que l'on est pas en fin de tableau 'Si cellule non vide (Item définit) 'Nombre items dans l'ensemble = Nb Items + 1 'Fin Si 'Incrémentation variable comptage i 'Fin tant que 'Sinon 'Nombre d'items dans l'ensemble = 0 'Fin Si 'Autres cas 'On efface Jx 'Fin si 'Fin si 'Fin Sub
Edit : Par contre il y a un souci ligne 11 lorsque j'arrive en fin de tableau je récupère bien le nombre d'items mais j'ai un message d'erreur : Erreur 1004 , erreur définie par l'application ou par l'objet. .
Ca à l'air de venir du test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Target.Row < Range("D65536").End(xlUp).Row
Partager