Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

créer un rapport

5 réponses
Avatar
jpwitz
Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des
valeurs de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive pas
à créer cette liste.

Merci pour votre aide

JPW

5 réponses

Avatar
Daniel.C
Bonjour.
Avec les données en colonne A et B, les résultats en colonnes D et E.
Exécute la macro suivante :

Sub test1()
Dim c As Range, Ctr As Integer
For Each c In Range([A1], [A65536].End(xlUp))
Var = Application.Match(c, [D:D], 0)
If Not IsNumeric(Var) Then
Ctr = Ctr + 1
Cells(Ctr, 4) = c.Value
Cells(Ctr, 5) = c.Offset(, 1).Value
Else
Cells(Var, 5) = Cells(Var, 5) & "," & c.Offset(, 1).Value
End If
Next c
End Sub

Daniel

Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des valeurs
de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive pas à
créer cette liste.

Merci pour votre aide

JPW
Avatar
michdenis
Bonjour,

Une alternative :
Les données sont présumées être dans les colonnes
A1 à Bx
Les données sont triées selon la valeur en colonne A:A

'-------------------------------------
Sub test()
Dim DerLig As Long, CurrentCell As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
With Worksheets("Feuil1")
With .Range("A:B")
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
With .Range("A1:B" & DerLig)
.Sort Key1:=.Item(1, 1), Order1:=xlAscending, Header:=xlNo
End With
Set CurrentCell = .Range("A1")
x = 1
Do While CurrentCell.Row < DerLig
If CurrentCell = CurrentCell.Offset(1) Then
x = x + 1
CurrentCell.Offset(, x).Value = CurrentCell.Offset(1, 1)
CurrentCell.Offset(1).Resize(, 2).Delete
DerLig = DerLig - 1
Else
Set CurrentCell = CurrentCell.Offset(1)
x = 1
End If
Loop
End With
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
'-------------------------------------



"jpwitz" <jp.witz-à a écrit dans le message de groupe de discussion :
4bb49044$0$20655$
Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des
valeurs de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive pas
à créer cette liste.

Merci pour votre aide

JPW
Avatar
michdenis
Une autre possibilité similaire à la première ayant pour objet
d'augmenter le temps de traitement.

'---------------------------------------------
Sub test()
Dim DerLig As Long, CurrentCell As Range
Dim x As Integer, NextCell As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
With Worksheets("sheet1")
With .Range("A:B")
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
With .Range("A1:B" & DerLig)
.Sort Key1:=.Item(1, 1), _
Order1:=xlAscending, Header:=xlNo
End With
Set CurrentCell = .Range("A1")
Set NextCell = CurrentCell.Offset(1)
x = 1
Do While CurrentCell.Row < DerLig
If CurrentCell = NextCell Then
x = x + 1
CurrentCell.Offset(, x).Value = NextCell.Offset(1, 1)
NextCell = ""
Set NextCell = NextCell.Offset(1)
Else
Set CurrentCell = NextCell
Set NextCell = CurrentCell.Offset(1)
x = 1
End If
Loop
End With
Set CurrentCell = Nothing: Set NextCell = Nothing
Sheet1.Range("A1:A" & DerLig).SpecialCells _
(xlCellTypeBlanks).EntireRow.Delete
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
'---------------------------------------------




"michdenis" a écrit dans le message de groupe de discussion :

Bonjour,

Une alternative :
Les données sont présumées être dans les colonnes
A1 à Bx
Les données sont triées selon la valeur en colonne A:A

'-------------------------------------
Sub test()
Dim DerLig As Long, CurrentCell As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
With Worksheets("Feuil1")
With .Range("A:B")
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
With .Range("A1:B" & DerLig)
.Sort Key1:=.Item(1, 1), Order1:=xlAscending, Header:=xlNo
End With
Set CurrentCell = .Range("A1")
x = 1
Do While CurrentCell.Row < DerLig
If CurrentCell = CurrentCell.Offset(1) Then
x = x + 1
CurrentCell.Offset(, x).Value = CurrentCell.Offset(1, 1)
CurrentCell.Offset(1).Resize(, 2).Delete
DerLig = DerLig - 1
Else
Set CurrentCell = CurrentCell.Offset(1)
x = 1
End If
Loop
End With
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
'-------------------------------------



"jpwitz" <jp.witz-à a écrit dans le message de groupe de discussion :
4bb49044$0$20655$
Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des
valeurs de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive pas
à créer cette liste.

Merci pour votre aide

JPW
Avatar
jpwitz
Bonjour
Merci pour votre aide.
Votre code marche bien avec des valeurs de cellules fixe.
J'ai essayé de créer une fonction avec 2 paramètres :
Colstat est le groupe de cellule source (A15:A25 par exemple)
RelativeColListe est l'offset relatif (+1 pour la colonne B
un troisième paramètre est la cellule contenant la fonction ActiveCell
qui recevra le début du tableau créé.
Mais là ça coince au niveau de la fonction Match , le paramètre RANGE(...)
Quelle est la syntaxe à mettre ici?
Je vous mets mon code ci-dessous.
Re - Merci

JPW


Function Liste_stat(ColStat As Range, RelativeColListe As Integer)
Dim c As Range, Ctr As Integer
Ctr = 1
For Each c In ColStat
Var = Application.Match(c, Range(ActiveCell.Address, _
ActiveCell.Offset(Ctr, 0).Address), 0)
If Not IsNumeric(Var) Then
Ctr = Ctr + 1
ActiveCell.Offset(Ctr, 0) = c.Value
ActiveCell.Offset(Ctr, 1).Value = c.Offset(, _
RelativeColListe).Value
Else
ActiveCell.Offset(Var, 1) = ActiveCell.Offset(Var, 1) & "," &
c.Offset(, RelativeColListe).Value
End If
Next c
End Function




Daniel.C a écrit :
Bonjour.
Avec les données en colonne A et B, les résultats en colonnes D et E.
Exécute la macro suivante :

Sub test1()
Dim c As Range, Ctr As Integer
For Each c In Range([A1], [A65536].End(xlUp))
Var = Application.Match(c, [D:D], 0)
If Not IsNumeric(Var) Then
Ctr = Ctr + 1
Cells(Ctr, 4) = c.Value
Cells(Ctr, 5) = c.Offset(, 1).Value
Else
Cells(Var, 5) = Cells(Var, 5) & "," & c.Offset(, 1).Value
End If
Next c
End Sub

Daniel

Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des
valeurs de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive
pas à créer cette liste.

Merci pour votre aide

JPW




Avatar
Daniel.C
Bonjour.
Ca ne peut pas fonctionner comme ça; une fonction retourne une valeur
dans la cellule où elle se situe. Elle ne peut pas remplir la cellule
d'à côté.
Cordialement.
Daniel

Bonjour
Merci pour votre aide.
Votre code marche bien avec des valeurs de cellules fixe.
J'ai essayé de créer une fonction avec 2 paramètres :
Colstat est le groupe de cellule source (A15:A25 par exemple)
RelativeColListe est l'offset relatif (+1 pour la colonne B
un troisième paramètre est la cellule contenant la fonction ActiveCell qui
recevra le début du tableau créé.
Mais là ça coince au niveau de la fonction Match , le paramètre RANGE(...)
Quelle est la syntaxe à mettre ici?
Je vous mets mon code ci-dessous.
Re - Merci

JPW


Function Liste_stat(ColStat As Range, RelativeColListe As Integer)
Dim c As Range, Ctr As Integer
Ctr = 1
For Each c In ColStat
Var = Application.Match(c, Range(ActiveCell.Address, _
ActiveCell.Offset(Ctr, 0).Address), 0)
If Not IsNumeric(Var) Then
Ctr = Ctr + 1
ActiveCell.Offset(Ctr, 0) = c.Value
ActiveCell.Offset(Ctr, 1).Value = c.Offset(, _
RelativeColListe).Value
Else
ActiveCell.Offset(Var, 1) = ActiveCell.Offset(Var, 1) & "," &
c.Offset(, RelativeColListe).Value
End If
Next c
End Function




Daniel.C a écrit :
Bonjour.
Avec les données en colonne A et B, les résultats en colonnes D et E.
Exécute la macro suivante :

Sub test1()
Dim c As Range, Ctr As Integer
For Each c In Range([A1], [A65536].End(xlUp))
Var = Application.Match(c, [D:D], 0)
If Not IsNumeric(Var) Then
Ctr = Ctr + 1
Cells(Ctr, 4) = c.Value
Cells(Ctr, 5) = c.Offset(, 1).Value
Else
Cells(Var, 5) = Cells(Var, 5) & "," & c.Offset(, 1).Value
End If
Next c
End Sub

Daniel

Bonjour

Soit un tableau
Pierre 45
Paul 50
Jacques 65
Paul 12
Jacques 26
Pierre 36

Je voudrais créer un tableau qui "compile" en générant une liste des
valeurs de la façon suivante:
Pierre 45,36
Paul 50,12
Jacques 65,26

J'ai essayé en créant un tableau croisé dynamique, mais je n'arrive pas
à créer cette liste.

Merci pour votre aide

JPW