Pb de mise en forme et manipulation de cellules

Signaler
Messages postés
2
Date d'inscription
lundi 18 septembre 2006
Statut
Membre
Dernière intervention
19 septembre 2006
-
Messages postés
2
Date d'inscription
lundi 18 septembre 2006
Statut
Membre
Dernière intervention
19 septembre 2006
-
Bonjour a tous,
je suis presque débutant en VBA et j'ai besoin d'un peu d'aide.

Je vous présente mon problème :
j'ai une plage de données s'apparentant à un fichier client se présentant comme suit :
Les clients sont associés à des montants placés dans des colonnes qui définissent une catégorie. Un client peut donc etre classé en CAT1 pour 100 et en CAT2 pour 200.

RefClient         Client      CAT1      CAT2      CAT3
ABC               *****      100          200            
GHR                 $$$$                        50            75

et je veux arriver à dédoubler les lignes de façon à ce que une seule catégorie apparaisse par ligne. Une ligne associerait donc un client à une catégorie pour un montant correspondant.
Avec l'exemple précédant, cela donnerait :

RefClient      Client         CAT      Montant
ABC            *****         1               100
ABC            *****         2               200
GHR            $$$$$         2               50
GHR            $$$$$         3               75

Cette manipulation me pose beaucoup de probleme car je suis obligé de l'éxécuter manuellement et cela me pose beaucoup de problemes.
Je vous remercie infiniment de toute l'aide que vous pourrez m'apporter.

2 réponses

Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,
 
J' ai peut être une solution.
Je te l' expose sommairement sans entrer dans les détails.


Supposons que T1 est ton tableau initial,
et que tu veux transposer le résultat dans T2.


1° Fais d' abord une fonction qui retourne la catégorie
d' un Client selon le montant d' une cellule CAT:
Exemple :
 Function FCAT(xMt as Currency) as Integer
   If xMt=0 Then
       FCAT=0
   ElseIf (xMt>0) AND  (xMt<=100) Then
       FCAT=1
   ElseIf (xMt>100) AND  (xMt<=200) Then
       FCAT=2


     etc...
   End If
    (Tu peux utiliser Select Case
 End Function


 2° Tu parcours ton tableau T1 ligne par ligne
      Pour chaque ligne tu fais appel à ta fonction FCAT trois fois
      pour tester sur le contenu des colonnes CAT1, CAT2 et  CAT3.
      
   If FCAT(contenu de CAT1)>0  'cellule non vide 
    tu ajoutes une ligne dans T2 avec
     RefClient    NomClient     CAT                   Montant 
                                        le résultat de FCAT   le contenu de CAT1
       ABC            *****                1                           100
    
    puis
   If FCAT(contenu de CAT2)>0  'cellule non vide 
    tu ajoutes une ligne dans T2 avec
     RefClient    NomClient     CAT                    Montant 
                                         le résultat de FCAT   le contenu de CAT2
         ABC            *****               2                       200
 
    puis 
   If FCAT(contenu de CAT3)>0  'cellule non vide 
   tu ajoutes une ligne dans T2 avec
    RefClient    NomClient     CAT                  Montant 
                                    le résultat de FCAT   le contenu de CAT3              
         GHR            $$$$$           1                         75
                                                 (initialement 3)
   
  Tu passes à la ligne suivante de T1
  Et tu refais les trois tests
  
   Ainsi de suite...

  A première vue , ça me semble correct,
  à toi de voir si ça marche.

chaibat
Messages postés
2
Date d'inscription
lundi 18 septembre 2006
Statut
Membre
Dernière intervention
19 septembre 2006

Je te remercie vivement Chaibat, je vais m'empresser de tester cette procédure aujourd'hui  ;)  :D