matrices avec classes vba/excel - VB/VBA/VBS - Programmation
MarshPosté le 20-04-2006 à 09:20:22
j'ai une matrice avec en colonnes les effectifs de salariés (en têtes : effectifs) et en lignes le nombre de postes informatiques ( en têtes : effectifs de postes)
Au milieu soit des vides (on ne possède pas les données)soit des marges aux "intersections" (par exemple à l'intersection de la colonne "10 salariés" et de la ligne "10 pc" on a 18732.61
En fait j'essaye de restructurer la matrice pr que les en têtes deviennent des classes d'effectifs et des classes de pc. classes d'effectifs : 0. 1-20. 20-50 etc.. classes de pc : 0. 1-10 10-50 etc... et les données au milieu suivent, si la colonne est compri ds telle classe et la ligne ds telle classe alors on mettra la donnée à l'intersection de ces 2 classes et on l'ajoutera à la précèdente s'il y en a une.
voici mon programme, lancé avec une matrice de taille quelconque de a1 à c7 par exemple, avec en a les en-têtes lignes et en 1 les en-têtes colonnes
Sub testclass()
Dim I As Integer Range("a2" ).Select Range("Feuil2!b2:Feuil2!z15" ).ClearContents
Do While ActiveCell.Offset(0, I) <> "" I = 0 cpt = 0 Do While UCase(Range("feuil2!b2" ).Offset(cpt, 0)) <> "" And UCase(Range("feuil2!b2" ).Offset(cpt, 0)) <> UCase(ActiveCell)
cpt = cpt + 1 Loop
If ActiveCell >= 1 And ActiveCell < 20 Then If ActiveCell.Offset(-cpt, I) >= 1 And ActiveCell.Offset(-cpt, I) < 10 Then Range("Feuil2!c2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!c2" ) Else If ActiveCell.Offset(-cpt, I) >= 10 And ActiveCell.Offset(-cpt, I) < 50 Then Range("Feuil2!d2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!d2" ) Else If ActiveCell.Offset(-cpt, I) >= 50 And ActiveCell.Offset(-cpt, I) < 100 Then Range("Feuil2!e2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!e2" ) Else If ActiveCell.Offset(-cpt, I) >= 100 And ActiveCell.Offset(-cpt, I) < 250 Then Range("Feuil2!f2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!f2" ) Else If ActiveCell.Offset(-cpt, I) >= 250 And ActiveCell.Offset(-cpt, I) < 500 Then Range("Feuil2!g2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!g2" ) Else If ActiveCell.Offset(-cpt, I) >= 500 And ActiveCell.Offset(-cpt, I) < 900 Then Range("Feuil2!h2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!h2" ) Else Range("Feuil2!i2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!i2" ) End If End If End If End If End If End If Else Range("feuil2!b10" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!b10" ) End If I = I + 1 Selection.Offset(1, 0).Select Loop End Sub
Marsh Posté le 20-04-2006 à 09:20:22
j'ai une matrice avec en colonnes les effectifs de salariés (en têtes : effectifs) et en lignes
le nombre de postes informatiques ( en têtes : effectifs de postes)
Au milieu soit des vides (on ne possède pas les données)soit des marges aux "intersections"
(par exemple à l'intersection de la colonne "10 salariés" et de la ligne "10 pc" on a 18732.61
En fait j'essaye de restructurer la matrice pr que les en têtes deviennent des classes d'effectifs
et des classes de pc.
classes d'effectifs : 0. 1-20. 20-50 etc..
classes de pc : 0. 1-10 10-50 etc...
et les données au milieu suivent, si la colonne est compri ds telle classe et la ligne ds
telle classe alors on mettra la donnée à l'intersection de ces 2 classes et on
l'ajoutera à la précèdente s'il y en a une.
voici mon programme, lancé avec une matrice de taille quelconque de a1 à c7 par exemple, avec en a les en-têtes lignes et en 1 les en-têtes colonnes
Sub testclass()
Dim I As Integer
Range("a2" ).Select
Range("Feuil2!b2:Feuil2!z15" ).ClearContents
Do While ActiveCell.Offset(0, I) <> ""
I = 0
cpt = 0
Do While UCase(Range("feuil2!b2" ).Offset(cpt, 0)) <> "" And UCase(Range("feuil2!b2" ).Offset(cpt, 0)) <> UCase(ActiveCell)
cpt = cpt + 1
Loop
If ActiveCell >= 1 And ActiveCell < 20 Then
If ActiveCell.Offset(-cpt, I) >= 1 And ActiveCell.Offset(-cpt, I) < 10 Then
Range("Feuil2!c2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!c2" )
Else
If ActiveCell.Offset(-cpt, I) >= 10 And ActiveCell.Offset(-cpt, I) < 50 Then
Range("Feuil2!d2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!d2" )
Else
If ActiveCell.Offset(-cpt, I) >= 50 And ActiveCell.Offset(-cpt, I) < 100 Then
Range("Feuil2!e2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!e2" )
Else
If ActiveCell.Offset(-cpt, I) >= 100 And ActiveCell.Offset(-cpt, I) < 250 Then
Range("Feuil2!f2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!f2" )
Else
If ActiveCell.Offset(-cpt, I) >= 250 And ActiveCell.Offset(-cpt, I) < 500 Then
Range("Feuil2!g2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!g2" )
Else
If ActiveCell.Offset(-cpt, I) >= 500 And ActiveCell.Offset(-cpt, I) < 900 Then
Range("Feuil2!h2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!h2" )
Else
Range("Feuil2!i2" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!i2" )
End If
End If
End If
End If
End If
End If
Else
Range("feuil2!b10" ) = ActiveCell.Offset(0, 1) + Range("Feuil2!b10" )
End If
I = I + 1
Selection.Offset(1, 0).Select
Loop
End Sub