matrices avec classes vba/excel

matrices avec classes vba/excel - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 20-04-2006 à 09:20:22   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed