Extraction de données par sous ensemble

10 réponses
Avatar
Apitos
Bonjour =E0 tous,

Dans la colonne A, j=92ai des donn=E9es sous forme S-x-y

Dans la colonne B, j=92ai des donn=E9es sous forme de zRi, zBG, zUD.

S-13-0=09
S-16-0=09
S-16-1=09
S-1-14 4RI
S-10-0 20RI
S-10-2 24RI
S-10-5 30BG
S-10-1 31RI
S-10-7 34UD
S-12-11 39RI
S-11-12 40RI

J=92aimerais comptabiliser dans un tableau les sous ensemble suivants :

-Y dans la colonne A (Ex : Le S-10 contient 5 sous ensemble)

-RI qui correspond =E0 l=92ensemble (S-x) dans la colonne A (Ex : il y a 3 =
RI dans l=92ensemble S-10)

-BG qui correspond =E0 l=92ensemble (S-x) dans la colonne A (Ex : il y a 1 =
BG dans l=92ensemble S-10)

-UD qui correspond =E0 l=92ensemble (S-x) dans la colonne A (Ex : il y a 1 =
UD dans l=92ensemble S-10)


Pour le moment, le code compte le nombre des S-x, il reste la comptage de R=
I, BG et UD par S-x.

(Ma connexion est tr=E9s faible, je n'ai pas pu joindre un exemple)


Merci d=92avance.

10 réponses

Avatar
Apitos
Bonjour,

Voila l'exemple :

http://cjoint.com/?BIdiDJnS5V2
Avatar
DanielCo
Bonjour,
"P" correspond à quoi (cellule E1) ?
Daniel



Bonjour à tous,

Dans la colonne A, j’ai des données sous forme S-x-y

Dans la colonne B, j’ai des données sous forme de zRi, zBG, zUD.

S-13-0
S-16-0
S-16-1
S-1-14 4RI
S-10-0 20RI
S-10-2 24RI
S-10-5 30BG
S-10-1 31RI
S-10-7 34UD
S-12-11 39RI
S-11-12 40RI

J’aimerais comptabiliser dans un tableau les sous ensemble suivants :

-Y dans la colonne A (Ex : Le S-10 contient 5 sous ensemble)

-RI qui correspond à l’ensemble (S-x) dans la colonne A (Ex : il y a 3 RI
dans l’ensemble S-10)

-BG qui correspond à l’ensemble (S-x) dans la colonne A (Ex : il y a 1 BG
dans l’ensemble S-10)

-UD qui correspond à l’ensemble (S-x) dans la colonne A (Ex : il y a 1 UD
dans l’ensemble S-10)


Pour le moment, le code compte le nombre des S-x, il reste la comptage de RI,
BG et UD par S-x.

(Ma connexion est trés faible, je n'ai pas pu joindre un exemple)


Merci d’avance.
Avatar
Apitos
Bonjour Daniel,

"P" correspond à quoi (cellule E1) ?



Elle correspond au nombre des sous-ensemles S-x-y dans la colonne A.

Dans l'exemple en haut, on peut compter 5 sous-ensemble dans l'ensemble S-1 0
Avatar
MichD
Bonjour,

Tu cherches quelque chose comme ceci :

http://cjoint.com/?BIdoeqZ42Po



MichD
--------------------------------------------------------------
Avatar
Apitos
Bonsoir Denis,

Merci pour le fichier.

Mais comment extraire les valeurs de la colonne D (S) ?

Ou peut-on le faire en VBA tout simplement ?

Merci.
Avatar
MichD
Pour extraire l'information en Colonne D,

Dans une colonne à l'extérieur de ton tableau, tu copies sur la ligne2
la formule suivante : =STXT(A2;3;CHERCHE("-";A2;4)-3) que tu recopies sur toute la colonne où
tu as des données en colonne A:A

Tu fais un copier-collage spécial (Valeur seulement) pour soustraire les formules.
Tu tries la colonne en ordre croissant et tu fais un filtre élaboré sans doublon sur cette colonne
Tu copies le résultat obtenu dans la colonne D2:Dx




MichD
--------------------------------------------------------------
"Apitos" a écrit dans le message de groupe de discussion :


Bonsoir Denis,

Merci pour le fichier.

Mais comment extraire les valeurs de la colonne D (S) ?

Ou peut-on le faire en VBA tout simplement ?

Merci.
Avatar
Apitos
J'aimerais les avoir sa
Avatar
Apitos
J'aimerais les avoir avoir sans doublons.

C'est pour cela, que j'ai demandé un code VBA, c'est si possible.

Merci.
Avatar
MichD
Traduit en VBA, cela donnerait quelque chose comme :

'-------------------------------------------------
Sub test()
Dim DerLig As Long
On Error Resume Next
With Worksheets("Feuil1") 'Adapte le nom de la feuille au besoin.
DerLig = .Range("A65536").End(xlUp).Row
.Range("K2:K" & DerLig).Formula = "=MID(" & .Range("A2").Address(0, 0) & _
",3,SEARCH(""-""," & .Range("A2").Address(0, 0) & ",4)-3)*1"
With .Range("K2:K" & DerLig)
.Value = .Value
.Sort .Item(2, 1), xlAscending, Header:=xlNo
End With

.Range("K1:K" & DerLig).AdvancedFilter xlFilterInPlace, , , True
.Range("K2:K" & DerLig).SpecialCells(xlCellTypeVisible). _
Offset(1).Copy Feuil1.Range("D2")

.ShowAllData
.Range("K:K").Clear
End With
End Sub
'-------------------------------------------------





MichD
--------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : k229c8$rag$


Pour extraire l'information en Colonne D,

Dans une colonne à l'extérieur de ton tableau, tu copies sur la ligne2
la formule suivante : =STXT(A2;3;CHERCHE("-";A2;4)-3) que tu recopies sur toute la colonne où
tu as des données en colonne A:A

Tu fais un copier-collage spécial (Valeur seulement) pour soustraire les formules.
Tu tries la colonne en ordre croissant et tu fais un filtre élaboré sans doublon sur cette colonne
Tu copies le résultat obtenu dans la colonne D2:Dx




MichD
--------------------------------------------------------------
"Apitos" a écrit dans le message de groupe de discussion :


Bonsoir Denis,

Merci pour le fichier.

Mais comment extraire les valeurs de la colonne D (S) ?

Ou peut-on le faire en VBA tout simplement ?

Merci.
Avatar
Apitos
Bonsoir Denis,

Voila un code qui fonctionne très bien.

'----------------------------
Option Explicit
'Activer la Référence Microsoft Scripting Runtime
Sub Traiter()
Const Cible As String = "K1"
Dim Str As String, Code As String, Res()
Dim LastLig As Long, i As Long, n As Long
Dim j As Integer, m As Integer
Dim MonDico As New Scripting.Dictionary
Dim ItemDico As New Scripting.Dictionary
Dim Tb

Application.ScreenUpdating = False
With Feuil1
LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
Tb = .Range("A2:B" & LastLig)
For i = 1 To UBound(Tb, 1)
Str = Tb(i, 1)
Code = SupprNum(Tb(i, 2))
If InStr(Str, "-") Then
If Not ItemDico.Exists(Code) And Code <> "" Then ItemDico.Add C ode, Code
Str = Left(Str, InStrRev(Str, "-") - 1)

If Not MonDico.Exists(Str) Then
MonDico.Add Str, Code
Else
MonDico(Str) = MonDico(Str) & "," & Code
End If
End If
Next i

m = ItemDico.Count
If m > 0 Then
n = MonDico.Count
If n > 0 Then
ReDim Res(1 To n + 1, 1 To m + 2)
Res(1, 1) = "S"
Res(1, 2) = "P"
For j = 0 To m - 1
Res(1, j + 3) = ItemDico.Items(j)
Next j
For i = 0 To n - 1
Res(i + 2, 1) = Mid(MonDico.Keys(i), 3)
Res(i + 2, 2) = UBound(Split(MonDico.Items(i), ",")) + 1
For j = 0 To m - 1
Res(i + 2, j + 3) = CompteItems(MonDico.Items(i), Ite mDico.Items(j))
Next j
Next i
Set MonDico = Nothing
.Range(Cible).Resize(n + 1, m + 2) = Res
.Range(Cible).Resize(n + 1, m + 2).Sort Key1:=.Range(Cible), Order1:=xlAscending, Header:=xlYes
End If
End If
End With
End Sub

Private Function SupprNum(ByVal Str As String) As String
Dim Rg As Object

Set Rg = CreateObject("vbscript.Regexp")
With Rg
.Pattern = "d"
.Global = True
SupprNum = .Replace(Str, "")
End With
Set Rg = Nothing
End Function

Private Function CompteItems(ByVal Str As String, ByVal Txt As String) As I nteger
Dim i As Integer, n As Integer
Dim Tb

If Len(Str) > 0 Then
Str = Mid(Str, 2)
If InStr(Str, ",") Then
Tb = Split(Str, ",")
For i = LBound(Tb) To UBound(Tb)
If UCase(Tb(i)) = UCase(Txt) Then n = n + 1
Next i
End If
End If
CompteItems = n
End Function
'----------------------

Et comme j'ai en colonne B des données de la forme :

122R3I, 95B5G1, 103UDI6 et 24UNI6

J’ai modifié le masque regex en :

'------------------------
.Pattern = "^d{0,3}"
'------------------------

Pour éliminer tout chiffre au début de chaque chaine de caractères.

Ainsi, par ce masque j'ai eu le résultat suivant :

R3I, B5G1, UDI6 et UNI6

Maintenant, je souhaiterais comptabiliser le nombre des UDI6 et UNI6 dans u ne seule cellule, parce que c'est une appellation pour la même donnée.

Merci d'avance.