Mais comment extraire les valeurs de la colonne D (S) ?
Ou peut-on le faire en VBA tout simplement ?
Merci.
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.
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 :
c34da8c6-e0e6-4d11-81e6-4cb35355675c@googlegroups.com...
Bonsoir Denis,
Merci pour le fichier.
Mais comment extraire les valeurs de la colonne D (S) ?
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) ?
C'est pour cela, que j'ai demandé un code VBA, c'est si possible.
Merci.
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
.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.
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
.ShowAllData
.Range("K:K").Clear
End With
End Sub
'-------------------------------------------------
MichD
--------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : k229c8$rag$1@speranza.aioe.org...
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 :
c34da8c6-e0e6-4d11-81e6-4cb35355675c@googlegroups.com...
Bonsoir Denis,
Merci pour le fichier.
Mais comment extraire les valeurs de la colonne D (S) ?
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
.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.
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 :
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.
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 :
'---------------------------- 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 :