A voir également:
- VBA: transfert de données entre colonnes
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Autofill vba ✓ - Forum Excel
4 réponses
dct33
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
20 avril 2010
39
15 avril 2010 à 21:49
15 avril 2010 à 21:49
Bonsoir,
J'ai mis vos données colonne 1 et 2 à partir de la ligne 1
Je vous ai fait un truc vite fait, je suis parti du principe que le nombre de critères n'est pas connu (O G H et d'autres)
Sub Macro1()
Dim Tableau_Critère() As String
Dim Tableau_Critère2() As String
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
X = 1
' chargement de tous les critères dans un tableau Tableau_Critère
While Cells(X, 1) <> ""
ReDim Preserve Tableau_Critère(X) As String
Tableau_Critère(X) = Cells(X, 1)
X = X + 1
Wend
ReDim Preserve Tableau_Critère2(1) As String
Tableau_Critère2(1) = Tableau_Critère(1)
' récupération dans un tableau des différents critères Tableau_Critère2
For Y = 1 To UBound(Tableau_Critère)
existe = 0
For Z = 1 To UBound(Tableau_Critère2)
If Tableau_Critère(Y) = Tableau_Critère2(Z) Then
existe = 1
Exit For
End If
Next Z
If existe = 0 Then
ReDim Preserve Tableau_Critère2(UBound(Tableau_Critère2) + 1) As String
Tableau_Critère2(UBound(Tableau_Critère2)) = Tableau_Critère(Y)
End If
Next Y
' recherche du max pour chaque critère
For X = 1 To UBound(Tableau_Critère2)
Max = 0
Y = 1
While Cells(Y, 1) <> ""
If Cells(Y, 1) = Tableau_Critère2(X) Then
If Cells(Y, 2) > Max Then Max = Cells(Y, 2)
End If
Y = Y + 1
Wend
' ecriture sur la feuille
Cells(X, 3) = Tableau_Critère2(X)
Cells(X, 4) = Max
Next X
End Sub
Comme toujours en programmation il y a plusieurs façons de voir
en voilà une
Bonne programmation
J'ai mis vos données colonne 1 et 2 à partir de la ligne 1
Je vous ai fait un truc vite fait, je suis parti du principe que le nombre de critères n'est pas connu (O G H et d'autres)
Sub Macro1()
Dim Tableau_Critère() As String
Dim Tableau_Critère2() As String
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
X = 1
' chargement de tous les critères dans un tableau Tableau_Critère
While Cells(X, 1) <> ""
ReDim Preserve Tableau_Critère(X) As String
Tableau_Critère(X) = Cells(X, 1)
X = X + 1
Wend
ReDim Preserve Tableau_Critère2(1) As String
Tableau_Critère2(1) = Tableau_Critère(1)
' récupération dans un tableau des différents critères Tableau_Critère2
For Y = 1 To UBound(Tableau_Critère)
existe = 0
For Z = 1 To UBound(Tableau_Critère2)
If Tableau_Critère(Y) = Tableau_Critère2(Z) Then
existe = 1
Exit For
End If
Next Z
If existe = 0 Then
ReDim Preserve Tableau_Critère2(UBound(Tableau_Critère2) + 1) As String
Tableau_Critère2(UBound(Tableau_Critère2)) = Tableau_Critère(Y)
End If
Next Y
' recherche du max pour chaque critère
For X = 1 To UBound(Tableau_Critère2)
Max = 0
Y = 1
While Cells(Y, 1) <> ""
If Cells(Y, 1) = Tableau_Critère2(X) Then
If Cells(Y, 2) > Max Then Max = Cells(Y, 2)
End If
Y = Y + 1
Wend
' ecriture sur la feuille
Cells(X, 3) = Tableau_Critère2(X)
Cells(X, 4) = Max
Next X
End Sub
Comme toujours en programmation il y a plusieurs façons de voir
en voilà une
Bonne programmation
Bonjour,
Tout d'abord, merci pour votre réponse, même si je n'ai pas tout compris!
En fait, l'objectif ici n'est pas de déterminer le max pour chaque critère mais par "groupement de critère" et par ligne.
Je m'explique: si en ligne 2 et 3 on a H et H, je voudrait qu'en colonne C s'affiche, pour les lignes 2 et 3, le maximum de ces 2 lignes.
Pour reprendre mon 1er exemple, le résultat serait ceci:
0 2000 2000
G 3400 3700
G 3700 3700
H 200 1500
H 1500 1500
H 1300 1500
G 1400 1400
Plus précisément, il n'y a que 2 critères, H et G. Pour les 0, il n'y a rien à faire, juste recopier la valeur de la colonne B en C.
Pour placer le contexte: j'ai un fichier client. J'ai regroupé certains clients en fonction de leurs appartenance à un groupe plus grand. H et G sont là pour dire "ce client appartient au même groupe que les H (ou G) adjacents. Les "0" sont des clients qui n'appartiennent pas à un groupe particulier
Encore merci.
Tout d'abord, merci pour votre réponse, même si je n'ai pas tout compris!
En fait, l'objectif ici n'est pas de déterminer le max pour chaque critère mais par "groupement de critère" et par ligne.
Je m'explique: si en ligne 2 et 3 on a H et H, je voudrait qu'en colonne C s'affiche, pour les lignes 2 et 3, le maximum de ces 2 lignes.
Pour reprendre mon 1er exemple, le résultat serait ceci:
0 2000 2000
G 3400 3700
G 3700 3700
H 200 1500
H 1500 1500
H 1300 1500
G 1400 1400
Plus précisément, il n'y a que 2 critères, H et G. Pour les 0, il n'y a rien à faire, juste recopier la valeur de la colonne B en C.
Pour placer le contexte: j'ai un fichier client. J'ai regroupé certains clients en fonction de leurs appartenance à un groupe plus grand. H et G sont là pour dire "ce client appartient au même groupe que les H (ou G) adjacents. Les "0" sont des clients qui n'appartiennent pas à un groupe particulier
Encore merci.
dct33
Messages postés
41
Date d'inscription
jeudi 8 avril 2010
Statut
Membre
Dernière intervention
20 avril 2010
39
Modifié par dct33 le 17/04/2010 à 11:55
Modifié par dct33 le 17/04/2010 à 11:55
Bonjour,
Au vu du petit tableau ceci doit s'approcher
J'ai fait débuter mon tableau en A2
Vous pouvez tout copier à partir du Sub Macro1() les explications à l'intérieur
sont en commentaire
Sub Macro1()
X = 2 ' mettre le numéro de ligne où débute votre tableau
Max = 0 ' Variable qui contient le Max
Debut_Groupe = X 'debut de la zone pour un critère
While Cells(X, 1) <> ""
If Cells(X, 2) > Max Then
Max = Cells(X, 2) ' recup du max pour un groupement
End If
If Cells(X + 1, 1) <> Cells(X, 1) Then
For Y = Debut_Groupe To X
Cells(Y, 3) = Max ' remplissage en colonne 3 du max pour un groupement
Next Y
Max = 0
Debut_Groupe = X + 1
End If
X = X + 1
Wend
End Sub
Bonne continuation
Au vu du petit tableau ceci doit s'approcher
J'ai fait débuter mon tableau en A2
Vous pouvez tout copier à partir du Sub Macro1() les explications à l'intérieur
sont en commentaire
Sub Macro1()
X = 2 ' mettre le numéro de ligne où débute votre tableau
Max = 0 ' Variable qui contient le Max
Debut_Groupe = X 'debut de la zone pour un critère
While Cells(X, 1) <> ""
If Cells(X, 2) > Max Then
Max = Cells(X, 2) ' recup du max pour un groupement
End If
If Cells(X + 1, 1) <> Cells(X, 1) Then
For Y = Debut_Groupe To X
Cells(Y, 3) = Max ' remplissage en colonne 3 du max pour un groupement
Next Y
Max = 0
Debut_Groupe = X + 1
End If
X = X + 1
Wend
End Sub
Bonne continuation