Si je regroupe les valeurs du code "abc" j'obtiens (2,3).=20
De m=EAme j'obtiens (1,2,3) pour "bde", (1) pour "cfg",=20
(1,2,3) pour "dhi" et (2) pour "ejk".
Je veux ins=E9rer ces groupes dans un deuxi=E8me tableau et=20
m'assurer qu'un groupe ne soit ins=E9r=E9 qu'une fois dans ce=20
tableau. J'obtiens donc quelque chose comme:
Actuellement, je peux facilement compl=E9ter une troisi=E8me=20
colonne =E0 mon Tableau 1 afin d'inscrire le groupe auquel=20
appartient le code. Par exemple:
Tableau 1:
Code Valeur Groupe
abc 2 1
abc 3 1
bde 1 2
bde 2 2
bde 3 2
cfg 1 3
dhi 1 2
dhi 2 2
dhi 3 2
ejk 2 4
Mon probl=E8me: tant qu'il n'y a que quelques lignes je peux=20
faire cette validation manuellement, cependant je sais=20
qu'il y aura =E9ventuellement des milliers de codes et=20
possiblement des centaines de groupes possibles.
Je cherche donc une fa=E7on d'identifier mes groupes dans le=20
Tableau 1. J'ai pens=E9 utiliser les diff=E9rentes valeurs du=20
groupe comme composantes dans un calcul math=E9matique afin=20
de calculer une valeur unique pour le groupe. Par exemple:=20
pour le code "abc", je prend les valeurs 2 et 3 dans un=20
calcul du genre (2 exposant 2)+(3 exposant 2)=3D13. Ainsi je=20
pourrais placer ce r=E9sultat dans le Tableau 2 et=20
j'obtiendrais ceci:
Tableau 2:
Code Groupe Calcul
1 (2,3) 13
2 (1,2,3) 14
3 (1) 1
4 (2) 4
De cette fa=E7on, je peux =E9tablir une proc=E9dure pour lire le=20
Tableau 1 (pour lequel je n'ai que les deux premi=E8res=20
colonnes au d=E9part). Cette proc=E9dure ferait la lecture de=20
chaque ligne du tableau (pr=E9alablement tri=E9) afin de lire=20
les valeurs d'un m=EAme code, puis elle ferait le calcul=20
math=E9matique appropri=E9 et ferait une recherche dans le=20
Tableau 2 pour v=E9rifier si le r=E9sultat existe. Dans=20
l'affirmative je prend la valeur de la colonne CodeG et je=20
l'ins=E8re dans le Tableau 1. Dans la n=E9gative, j'ins=E8re le=20
nouveau groupe dans le Tableau 2 avec un nouveau CodeG et=20
la valeur de mon nouveau CodeG dans le Tableau 1.
Ce que je cherche =E0 savoir avant d'aller plus loin: quelle=20
formule math=E9matique je pourrais utiliser afin de=20
m'assurer que le r=E9sultat soit "unique" pour le groupe de=20
valeur utilis=E9?=20
N'h=E9sitez pas si vous avez des questions pour mieux=20
comprendre maon besoin.
alors si j'ai bien compris ta question, c'est juste de regrouper les mêmes codes dans un tableau et de faire en sorte de n'avoir qu'une seule occurence dans ce nouveau tableau.
Voilà l'exemple que j'ai utilisé : COL A COL B Code Valeur abc 2 abc 3 dhi 3 bde 2 bde 2 ejk 3 cfg 1 dhi 1 dhi 2 bde 3 dhi 3 dhi 1 ejk 2 cfg 1 bde 1 abc 3
Le résultat de ma macro est envoyé sur la colonne "D" et "E".
COL D COL E abc 2,3,3 bde 1,2,3,2 etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
**************************************** Option Base 1
Sub TEST_VAL() Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As Integer
Columns("A:B").Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom Range("A2").Select NOM_G = Range("A2").Value VALEUR_1 = Range("A2").Value I = 0 LIGNE = 2 While ActiveCell.Value <> "" VALEUR_2 = ActiveCell.Value If VALEUR_1 = VALEUR_2 Then I = I + 1 ReDim Preserve TAB_VAL(I) TAB_VAL(I) = ActiveCell.Offset(0, 1).Value Else Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If LIGNE = LIGNE + 1 I = 1 ReDim TAB_VAL(I) NOM_G = ActiveCell.Value VALEUR_1 = ActiveCell.Value TAB_VAL(I) = ActiveCell.Offset(0, 1).Value End If ActiveCell.Offset(1, 0).Select Wend Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If End Sub ***************************************
Bon courage et à bientôt
Libfr
-----Message d'origine----- Bon début d'après-midi aux Européens et bon matin aux Québécois,
Si je regroupe les valeurs du code "abc" j'obtiens (2,3). De même j'obtiens (1,2,3) pour "bde", (1) pour "cfg", (1,2,3) pour "dhi" et (2) pour "ejk".
Je veux insérer ces groupes dans un deuxième tableau et m'assurer qu'un groupe ne soit inséré qu'une fois dans ce tableau. J'obtiens donc quelque chose comme:
Actuellement, je peux facilement compléter une troisième colonne à mon Tableau 1 afin d'inscrire le groupe auquel appartient le code. Par exemple: Tableau 1: Code Valeur Groupe abc 2 1 abc 3 1 bde 1 2 bde 2 2 bde 3 2 cfg 1 3 dhi 1 2 dhi 2 2 dhi 3 2 ejk 2 4
Mon problème: tant qu'il n'y a que quelques lignes je peux
faire cette validation manuellement, cependant je sais qu'il y aura éventuellement des milliers de codes et possiblement des centaines de groupes possibles.
Je cherche donc une façon d'identifier mes groupes dans le
Tableau 1. J'ai pensé utiliser les différentes valeurs du groupe comme composantes dans un calcul mathématique afin de calculer une valeur unique pour le groupe. Par exemple:
pour le code "abc", je prend les valeurs 2 et 3 dans un calcul du genre (2 exposant 2)+(3 exposant 2). Ainsi je
pourrais placer ce résultat dans le Tableau 2 et j'obtiendrais ceci: Tableau 2: Code Groupe Calcul 1 (2,3) 13 2 (1,2,3) 14 3 (1) 1 4 (2) 4
De cette façon, je peux établir une procédure pour lire le
Tableau 1 (pour lequel je n'ai que les deux premières colonnes au départ). Cette procédure ferait la lecture de chaque ligne du tableau (préalablement trié) afin de lire les valeurs d'un même code, puis elle ferait le calcul mathématique approprié et ferait une recherche dans le Tableau 2 pour vérifier si le résultat existe. Dans l'affirmative je prend la valeur de la colonne CodeG et je
l'insère dans le Tableau 1. Dans la négative, j'insère le nouveau groupe dans le Tableau 2 avec un nouveau CodeG et la valeur de mon nouveau CodeG dans le Tableau 1.
Ce que je cherche à savoir avant d'aller plus loin: quelle
formule mathématique je pourrais utiliser afin de m'assurer que le résultat soit "unique" pour le groupe de valeur utilisé?
N'hésitez pas si vous avez des questions pour mieux comprendre maon besoin.
Merci à l'avance.
René R.
.
Bonjour,
alors si j'ai bien compris ta question, c'est juste de
regrouper les mêmes codes dans un tableau et de faire en
sorte de n'avoir qu'une seule occurence dans ce nouveau
tableau.
Voilà l'exemple que j'ai utilisé :
COL A COL B
Code Valeur
abc 2
abc 3
dhi 3
bde 2
bde 2
ejk 3
cfg 1
dhi 1
dhi 2
bde 3
dhi 3
dhi 1
ejk 2
cfg 1
bde 1
abc 3
Le résultat de ma macro est envoyé sur la colonne "D"
et "E".
COL D COL E
abc 2,3,3
bde 1,2,3,2
etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
****************************************
Option Base 1
Sub TEST_VAL()
Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer
Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As
Integer
Columns("A:B").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom
Range("A2").Select
NOM_G = Range("A2").Value
VALEUR_1 = Range("A2").Value
I = 0
LIGNE = 2
While ActiveCell.Value <> ""
VALEUR_2 = ActiveCell.Value
If VALEUR_1 = VALEUR_2 Then
I = I + 1
ReDim Preserve TAB_VAL(I)
TAB_VAL(I) = ActiveCell.Offset(0, 1).Value
Else
Range("D" & LIGNE).Value = NOM_G
Range("E" & LIGNE).Value = TAB_VAL(1)
If UBound(TAB_VAL) > 1 Then
For J = 2 To I
Range("E" & LIGNE).Value = Range("E" &
LIGNE).Value & "," & TAB_VAL(J)
Next J
End If
LIGNE = LIGNE + 1
I = 1
ReDim TAB_VAL(I)
NOM_G = ActiveCell.Value
VALEUR_1 = ActiveCell.Value
TAB_VAL(I) = ActiveCell.Offset(0, 1).Value
End If
ActiveCell.Offset(1, 0).Select
Wend
Range("D" & LIGNE).Value = NOM_G
Range("E" & LIGNE).Value = TAB_VAL(1)
If UBound(TAB_VAL) > 1 Then
For J = 2 To I
Range("E" & LIGNE).Value = Range("E" &
LIGNE).Value & "," & TAB_VAL(J)
Next J
End If
End Sub
***************************************
Bon courage et à bientôt
Libfr
-----Message d'origine-----
Bon début d'après-midi aux Européens et bon matin aux
Québécois,
Si je regroupe les valeurs du code "abc" j'obtiens (2,3).
De même j'obtiens (1,2,3) pour "bde", (1) pour "cfg",
(1,2,3) pour "dhi" et (2) pour "ejk".
Je veux insérer ces groupes dans un deuxième tableau et
m'assurer qu'un groupe ne soit inséré qu'une fois dans ce
tableau. J'obtiens donc quelque chose comme:
Actuellement, je peux facilement compléter une troisième
colonne à mon Tableau 1 afin d'inscrire le groupe auquel
appartient le code. Par exemple:
Tableau 1:
Code Valeur Groupe
abc 2 1
abc 3 1
bde 1 2
bde 2 2
bde 3 2
cfg 1 3
dhi 1 2
dhi 2 2
dhi 3 2
ejk 2 4
Mon problème: tant qu'il n'y a que quelques lignes je
peux
faire cette validation manuellement, cependant je sais
qu'il y aura éventuellement des milliers de codes et
possiblement des centaines de groupes possibles.
Je cherche donc une façon d'identifier mes groupes dans
le
Tableau 1. J'ai pensé utiliser les différentes valeurs du
groupe comme composantes dans un calcul mathématique afin
de calculer une valeur unique pour le groupe. Par
exemple:
pour le code "abc", je prend les valeurs 2 et 3 dans un
calcul du genre (2 exposant 2)+(3 exposant 2)=13. Ainsi
je
pourrais placer ce résultat dans le Tableau 2 et
j'obtiendrais ceci:
Tableau 2:
Code Groupe Calcul
1 (2,3) 13
2 (1,2,3) 14
3 (1) 1
4 (2) 4
De cette façon, je peux établir une procédure pour lire
le
Tableau 1 (pour lequel je n'ai que les deux premières
colonnes au départ). Cette procédure ferait la lecture de
chaque ligne du tableau (préalablement trié) afin de lire
les valeurs d'un même code, puis elle ferait le calcul
mathématique approprié et ferait une recherche dans le
Tableau 2 pour vérifier si le résultat existe. Dans
l'affirmative je prend la valeur de la colonne CodeG et
je
l'insère dans le Tableau 1. Dans la négative, j'insère le
nouveau groupe dans le Tableau 2 avec un nouveau CodeG et
la valeur de mon nouveau CodeG dans le Tableau 1.
Ce que je cherche à savoir avant d'aller plus loin:
quelle
formule mathématique je pourrais utiliser afin de
m'assurer que le résultat soit "unique" pour le groupe de
valeur utilisé?
N'hésitez pas si vous avez des questions pour mieux
comprendre maon besoin.
alors si j'ai bien compris ta question, c'est juste de regrouper les mêmes codes dans un tableau et de faire en sorte de n'avoir qu'une seule occurence dans ce nouveau tableau.
Voilà l'exemple que j'ai utilisé : COL A COL B Code Valeur abc 2 abc 3 dhi 3 bde 2 bde 2 ejk 3 cfg 1 dhi 1 dhi 2 bde 3 dhi 3 dhi 1 ejk 2 cfg 1 bde 1 abc 3
Le résultat de ma macro est envoyé sur la colonne "D" et "E".
COL D COL E abc 2,3,3 bde 1,2,3,2 etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
**************************************** Option Base 1
Sub TEST_VAL() Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As Integer
Columns("A:B").Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom Range("A2").Select NOM_G = Range("A2").Value VALEUR_1 = Range("A2").Value I = 0 LIGNE = 2 While ActiveCell.Value <> "" VALEUR_2 = ActiveCell.Value If VALEUR_1 = VALEUR_2 Then I = I + 1 ReDim Preserve TAB_VAL(I) TAB_VAL(I) = ActiveCell.Offset(0, 1).Value Else Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If LIGNE = LIGNE + 1 I = 1 ReDim TAB_VAL(I) NOM_G = ActiveCell.Value VALEUR_1 = ActiveCell.Value TAB_VAL(I) = ActiveCell.Offset(0, 1).Value End If ActiveCell.Offset(1, 0).Select Wend Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If End Sub ***************************************
Bon courage et à bientôt
Libfr
-----Message d'origine----- Bon début d'après-midi aux Européens et bon matin aux Québécois,
Si je regroupe les valeurs du code "abc" j'obtiens (2,3). De même j'obtiens (1,2,3) pour "bde", (1) pour "cfg", (1,2,3) pour "dhi" et (2) pour "ejk".
Je veux insérer ces groupes dans un deuxième tableau et m'assurer qu'un groupe ne soit inséré qu'une fois dans ce tableau. J'obtiens donc quelque chose comme:
Actuellement, je peux facilement compléter une troisième colonne à mon Tableau 1 afin d'inscrire le groupe auquel appartient le code. Par exemple: Tableau 1: Code Valeur Groupe abc 2 1 abc 3 1 bde 1 2 bde 2 2 bde 3 2 cfg 1 3 dhi 1 2 dhi 2 2 dhi 3 2 ejk 2 4
Mon problème: tant qu'il n'y a que quelques lignes je peux
faire cette validation manuellement, cependant je sais qu'il y aura éventuellement des milliers de codes et possiblement des centaines de groupes possibles.
Je cherche donc une façon d'identifier mes groupes dans le
Tableau 1. J'ai pensé utiliser les différentes valeurs du groupe comme composantes dans un calcul mathématique afin de calculer une valeur unique pour le groupe. Par exemple:
pour le code "abc", je prend les valeurs 2 et 3 dans un calcul du genre (2 exposant 2)+(3 exposant 2). Ainsi je
pourrais placer ce résultat dans le Tableau 2 et j'obtiendrais ceci: Tableau 2: Code Groupe Calcul 1 (2,3) 13 2 (1,2,3) 14 3 (1) 1 4 (2) 4
De cette façon, je peux établir une procédure pour lire le
Tableau 1 (pour lequel je n'ai que les deux premières colonnes au départ). Cette procédure ferait la lecture de chaque ligne du tableau (préalablement trié) afin de lire les valeurs d'un même code, puis elle ferait le calcul mathématique approprié et ferait une recherche dans le Tableau 2 pour vérifier si le résultat existe. Dans l'affirmative je prend la valeur de la colonne CodeG et je
l'insère dans le Tableau 1. Dans la négative, j'insère le nouveau groupe dans le Tableau 2 avec un nouveau CodeG et la valeur de mon nouveau CodeG dans le Tableau 1.
Ce que je cherche à savoir avant d'aller plus loin: quelle
formule mathématique je pourrais utiliser afin de m'assurer que le résultat soit "unique" pour le groupe de valeur utilisé?
N'hésitez pas si vous avez des questions pour mieux comprendre maon besoin.
Merci à l'avance.
René R.
.
René R.
Bonjour libfr,
D'abord merci de m'aider.
Si tu changes les valeurs du tableau que tu as utilisé par celles-ci: COL A COL B Code Valeur abc 2 abc 3 abc 4 bde 1 bde 2 bde 3 bde 4 cfg 1 cfg 2 dhi 1 dhi 2 dhi 3 dhi 4 ejk 1 ejk 2
La macro que tu m'as proposée donnera: COL D COL E abc 2,3,4 bde 1,2,3,4 cfg 1,2 dhi 1,2,3,4 ejk 1,2
Tu peux constater que "bde" et "dhi" donnent tous les deux "1,2,3,4". Idem pour "cfg" et "ejk" qui donnent tous les deux "1,2). Or je souhaite éliminer les doublons. J'aimerais que le résultat soit: COL D COL E gr1 2,3,4 | Je voudrais conserver ce tableau et y gr2 1,2,3,4 | référer lorsque j'obtiens un nouveau gr3 1,2 / Tableau 1 (COL A et B)
et que la valeur "groupe1" soit inscrite sous la colonne C du premier tableau, soit: COL A COL B COL C Code Valeur Groupe abc 2 gr1 abc 3 gr1 abc 4 gr1 bde 1 gr2 bde 2 gr2 bde 3 gr2 bde 4 gr2 cfg 1 gr3 cfg 2 gr3 dhi 1 gr2 dhi 2 gr2 dhi 3 gr2 dhi 4 gr2 ejk 1 gr3 ejk 2 gr3
De plus, le volume de données risque d'être extrêmement élevé et le traitement doit être applicable dans un environnement autre qu'Excel (ex. ds une bd DB2). C'est pourquoi je souhaite une solution par l'utilisation d'une valeur calculée en utilisant les valeurs du groupe, de sorte que :
COL A COL B Code Valeur | bde 1 | J'utilise (1,2,3,4) dans une formule bde 2 | mathématique et j'obtiens résultat x bde 3 | que je cherche dans Tableau 2 COL F bde 4 /
et Tableau 2: COL D COL E COL F gr1 2,3,4 résultat y | La valeur inscrite en F est gr2 1,2,3,4 résultat y | le résultat d'un calcul avec gr3 1,2 résultat z / les valeurs de COL E
Il me faut donc une formule qui me garantit un résultat unique pour chaque groupe du Tableau 2. Ce résultat sera conservé dans Tableau 2. Chaque fois que je recevrai un nouveau Tableau 1 le calcul y sera fait et le résultat sera recherché dans Tableau 2. S'il y est retrouvé, c'est que le groupe existe et je l'inscrit sous COL C. S'il n'y est pas retrouvé, je l'insère dans Tableau 2 et j'inscris le nouveau groupe ainsi obtenu (grx, ou x peut être un nombre séquentiel) sous COL C de Tableau 1.
Mes explications sont possiblement confuses. N'hésitez pas à me questionner pour que je sois plus clair.
Merci à l'avance.
René R.
-----Message d'origine----- Bonjour,
alors si j'ai bien compris ta question, c'est juste de regrouper les mêmes codes dans un tableau et de faire en sorte de n'avoir qu'une seule occurence dans ce nouveau tableau.
Voilà l'exemple que j'ai utilisé : COL A COL B Code Valeur abc 2 abc 3 dhi 3 bde 2 bde 2 ejk 3 cfg 1 dhi 1 dhi 2 bde 3 dhi 3 dhi 1 ejk 2 cfg 1 bde 1 abc 3
Le résultat de ma macro est envoyé sur la colonne "D" et "E".
COL D COL E abc 2,3,3 bde 1,2,3,2 etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
**************************************** Option Base 1
Sub TEST_VAL() Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As Integer
Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom Range("A2").Select NOM_G = Range("A2").Value VALEUR_1 = Range("A2").Value I = 0 LIGNE = 2 While ActiveCell.Value <> "" VALEUR_2 = ActiveCell.Value If VALEUR_1 = VALEUR_2 Then I = I + 1 ReDim Preserve TAB_VAL(I) TAB_VAL(I) = ActiveCell.Offset(0, 1).Value Else Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" &
LIGNE).Value & "," & TAB_VAL(J) Next J End If LIGNE = LIGNE + 1 I = 1 ReDim TAB_VAL(I) NOM_G = ActiveCell.Value VALEUR_1 = ActiveCell.Value TAB_VAL(I) = ActiveCell.Offset(0, 1).Value End If ActiveCell.Offset(1, 0).Select Wend Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If End Sub ***************************************
Bon courage et à bientôt
Libfr
Bonjour libfr,
D'abord merci de m'aider.
Si tu changes les valeurs du tableau que tu as utilisé par
celles-ci:
COL A COL B
Code Valeur
abc 2
abc 3
abc 4
bde 1
bde 2
bde 3
bde 4
cfg 1
cfg 2
dhi 1
dhi 2
dhi 3
dhi 4
ejk 1
ejk 2
La macro que tu m'as proposée donnera:
COL D COL E
abc 2,3,4
bde 1,2,3,4
cfg 1,2
dhi 1,2,3,4
ejk 1,2
Tu peux constater que "bde" et "dhi" donnent tous les
deux "1,2,3,4". Idem pour "cfg" et "ejk" qui donnent tous
les deux "1,2). Or je souhaite éliminer les doublons.
J'aimerais que le résultat soit:
COL D COL E
gr1 2,3,4 | Je voudrais conserver ce tableau et y
gr2 1,2,3,4 | référer lorsque j'obtiens un nouveau
gr3 1,2 / Tableau 1 (COL A et B)
et que la valeur "groupe1" soit inscrite sous la colonne C
du premier tableau, soit:
COL A COL B COL C
Code Valeur Groupe
abc 2 gr1
abc 3 gr1
abc 4 gr1
bde 1 gr2
bde 2 gr2
bde 3 gr2
bde 4 gr2
cfg 1 gr3
cfg 2 gr3
dhi 1 gr2
dhi 2 gr2
dhi 3 gr2
dhi 4 gr2
ejk 1 gr3
ejk 2 gr3
De plus, le volume de données risque d'être extrêmement
élevé et le traitement doit être applicable dans un
environnement autre qu'Excel (ex. ds une bd DB2). C'est
pourquoi je souhaite une solution par l'utilisation d'une
valeur calculée en utilisant les valeurs du groupe, de
sorte que :
COL A COL B
Code Valeur |
bde 1 | J'utilise (1,2,3,4) dans une formule
bde 2 | mathématique et j'obtiens résultat x
bde 3 | que je cherche dans Tableau 2 COL F
bde 4 /
et Tableau 2:
COL D COL E COL F
gr1 2,3,4 résultat y | La valeur inscrite en F est
gr2 1,2,3,4 résultat y | le résultat d'un calcul avec
gr3 1,2 résultat z / les valeurs de COL E
Il me faut donc une formule qui me garantit un résultat
unique pour chaque groupe du Tableau 2. Ce résultat sera
conservé dans Tableau 2. Chaque fois que je recevrai un
nouveau Tableau 1 le calcul y sera fait et le résultat
sera recherché dans Tableau 2. S'il y est retrouvé, c'est
que le groupe existe et je l'inscrit sous COL C. S'il n'y
est pas retrouvé, je l'insère dans Tableau 2 et j'inscris
le nouveau groupe ainsi obtenu (grx, ou x peut être un
nombre séquentiel) sous COL C de Tableau 1.
Mes explications sont possiblement confuses. N'hésitez pas
à me questionner pour que je sois plus clair.
Merci à l'avance.
René R.
-----Message d'origine-----
Bonjour,
alors si j'ai bien compris ta question, c'est juste de
regrouper les mêmes codes dans un tableau et de faire en
sorte de n'avoir qu'une seule occurence dans ce nouveau
tableau.
Voilà l'exemple que j'ai utilisé :
COL A COL B
Code Valeur
abc 2
abc 3
dhi 3
bde 2
bde 2
ejk 3
cfg 1
dhi 1
dhi 2
bde 3
dhi 3
dhi 1
ejk 2
cfg 1
bde 1
abc 3
Le résultat de ma macro est envoyé sur la colonne "D"
et "E".
COL D COL E
abc 2,3,3
bde 1,2,3,2
etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
****************************************
Option Base 1
Sub TEST_VAL()
Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer
Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As
Integer
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom
Range("A2").Select
NOM_G = Range("A2").Value
VALEUR_1 = Range("A2").Value
I = 0
LIGNE = 2
While ActiveCell.Value <> ""
VALEUR_2 = ActiveCell.Value
If VALEUR_1 = VALEUR_2 Then
I = I + 1
ReDim Preserve TAB_VAL(I)
TAB_VAL(I) = ActiveCell.Offset(0, 1).Value
Else
Range("D" & LIGNE).Value = NOM_G
Range("E" & LIGNE).Value = TAB_VAL(1)
If UBound(TAB_VAL) > 1 Then
For J = 2 To I
Range("E" & LIGNE).Value = Range("E"
&
LIGNE).Value & "," & TAB_VAL(J)
Next J
End If
LIGNE = LIGNE + 1
I = 1
ReDim TAB_VAL(I)
NOM_G = ActiveCell.Value
VALEUR_1 = ActiveCell.Value
TAB_VAL(I) = ActiveCell.Offset(0, 1).Value
End If
ActiveCell.Offset(1, 0).Select
Wend
Range("D" & LIGNE).Value = NOM_G
Range("E" & LIGNE).Value = TAB_VAL(1)
If UBound(TAB_VAL) > 1 Then
For J = 2 To I
Range("E" & LIGNE).Value = Range("E" &
LIGNE).Value & "," & TAB_VAL(J)
Next J
End If
End Sub
***************************************
Si tu changes les valeurs du tableau que tu as utilisé par celles-ci: COL A COL B Code Valeur abc 2 abc 3 abc 4 bde 1 bde 2 bde 3 bde 4 cfg 1 cfg 2 dhi 1 dhi 2 dhi 3 dhi 4 ejk 1 ejk 2
La macro que tu m'as proposée donnera: COL D COL E abc 2,3,4 bde 1,2,3,4 cfg 1,2 dhi 1,2,3,4 ejk 1,2
Tu peux constater que "bde" et "dhi" donnent tous les deux "1,2,3,4". Idem pour "cfg" et "ejk" qui donnent tous les deux "1,2). Or je souhaite éliminer les doublons. J'aimerais que le résultat soit: COL D COL E gr1 2,3,4 | Je voudrais conserver ce tableau et y gr2 1,2,3,4 | référer lorsque j'obtiens un nouveau gr3 1,2 / Tableau 1 (COL A et B)
et que la valeur "groupe1" soit inscrite sous la colonne C du premier tableau, soit: COL A COL B COL C Code Valeur Groupe abc 2 gr1 abc 3 gr1 abc 4 gr1 bde 1 gr2 bde 2 gr2 bde 3 gr2 bde 4 gr2 cfg 1 gr3 cfg 2 gr3 dhi 1 gr2 dhi 2 gr2 dhi 3 gr2 dhi 4 gr2 ejk 1 gr3 ejk 2 gr3
De plus, le volume de données risque d'être extrêmement élevé et le traitement doit être applicable dans un environnement autre qu'Excel (ex. ds une bd DB2). C'est pourquoi je souhaite une solution par l'utilisation d'une valeur calculée en utilisant les valeurs du groupe, de sorte que :
COL A COL B Code Valeur | bde 1 | J'utilise (1,2,3,4) dans une formule bde 2 | mathématique et j'obtiens résultat x bde 3 | que je cherche dans Tableau 2 COL F bde 4 /
et Tableau 2: COL D COL E COL F gr1 2,3,4 résultat y | La valeur inscrite en F est gr2 1,2,3,4 résultat y | le résultat d'un calcul avec gr3 1,2 résultat z / les valeurs de COL E
Il me faut donc une formule qui me garantit un résultat unique pour chaque groupe du Tableau 2. Ce résultat sera conservé dans Tableau 2. Chaque fois que je recevrai un nouveau Tableau 1 le calcul y sera fait et le résultat sera recherché dans Tableau 2. S'il y est retrouvé, c'est que le groupe existe et je l'inscrit sous COL C. S'il n'y est pas retrouvé, je l'insère dans Tableau 2 et j'inscris le nouveau groupe ainsi obtenu (grx, ou x peut être un nombre séquentiel) sous COL C de Tableau 1.
Mes explications sont possiblement confuses. N'hésitez pas à me questionner pour que je sois plus clair.
Merci à l'avance.
René R.
-----Message d'origine----- Bonjour,
alors si j'ai bien compris ta question, c'est juste de regrouper les mêmes codes dans un tableau et de faire en sorte de n'avoir qu'une seule occurence dans ce nouveau tableau.
Voilà l'exemple que j'ai utilisé : COL A COL B Code Valeur abc 2 abc 3 dhi 3 bde 2 bde 2 ejk 3 cfg 1 dhi 1 dhi 2 bde 3 dhi 3 dhi 1 ejk 2 cfg 1 bde 1 abc 3
Le résultat de ma macro est envoyé sur la colonne "D" et "E".
COL D COL E abc 2,3,3 bde 1,2,3,2 etc ...
Alors voici le code (Test sous Excel 97 et VBA) :
**************************************** Option Base 1
Sub TEST_VAL() Dim VALEUR_1 As String, VALEUR_2 As String, J As Integer Dim TAB_VAL(), I As Integer, NOM_G As String, LIGNE As Integer
Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom Range("A2").Select NOM_G = Range("A2").Value VALEUR_1 = Range("A2").Value I = 0 LIGNE = 2 While ActiveCell.Value <> "" VALEUR_2 = ActiveCell.Value If VALEUR_1 = VALEUR_2 Then I = I + 1 ReDim Preserve TAB_VAL(I) TAB_VAL(I) = ActiveCell.Offset(0, 1).Value Else Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" &
LIGNE).Value & "," & TAB_VAL(J) Next J End If LIGNE = LIGNE + 1 I = 1 ReDim TAB_VAL(I) NOM_G = ActiveCell.Value VALEUR_1 = ActiveCell.Value TAB_VAL(I) = ActiveCell.Offset(0, 1).Value End If ActiveCell.Offset(1, 0).Select Wend Range("D" & LIGNE).Value = NOM_G Range("E" & LIGNE).Value = TAB_VAL(1) If UBound(TAB_VAL) > 1 Then For J = 2 To I Range("E" & LIGNE).Value = Range("E" & LIGNE).Value & "," & TAB_VAL(J) Next J End If End Sub ***************************************