excel aide macro pr comparer des lignes

excel aide macro pr comparer des lignes - VB/VBA/VBS - Programmation

Marsh Posté le 08-03-2005 à 16:12:38    

Bonjour, je cherche à comparer des lignes d'une feuille excel, et à fusionner des lignes excels en fonction d'une clé qui est dans la colonne A. J'ai fait un algorythme qui part du principe d'une double boucle toute simple, mais je ne connais absolument rien en VSB pour pouvoir le traduire.
Ca donne quelquechose comme ça:
 

Citation :


 
 
 
 
pour variable(a)=2 to 5000
variable(ah)=0  
variable(ai)=0
variable(ao)=0
si case(Hvariable(a))<>vide alors variable(ah)=1
si case(Ivariable(a))<>vide alors variable(ai)=1
si case(Ovariable(a))<>vide alors variable(ao)=1
 
    pour variable(b)=variable(a)+1 to 5000
    variable(bh)=0
    variable(bi)=0
    variable(bo)=0
    si case(A-variable(a)) = case(Avariable(b)) alors     si case(Hvariable(b))<>vide alors variable(bh)=1
   si case(Ivariable(b))<>vide alors variable(bi)=1
                si case(Ovariable(b))<>vide alors variable(bo)=1
 
                si variable (ah)=0 et si variable(bh)=1 alors copier(cases Gvariable(b);cases Hvariable(b)) et les coller dans (cases Gvariable(a);cases Hvariable(a))  
 cases GàHvariable(b)="DEPLACE"
   
                si variable(ai)=0 et si variable(bi)=1 alors copier(cases IàNvariable(b)) et les coller dans (cases IàNvariable(a))
 cases IàNvariable(b)="DEPLACE"
 
                si variable(ao)=0 et si variable(bo)=1 alors copier(cases OàVvariable(b)) et les coller dans (cases OàVvariable(a))
cases OàVvariable(b)="DEPLACE"
 
 
 
variableb=variableb+1
 
variable a=a+1


 
bon, je sais, c'est peut etre pas tres compehensible, mais je suis pas un pro, loin de là.
alors si quelqu'un peut me dire comment faire pour rendre cette "macro" comprehensible en language visual basic pour excel.
Par avance, merci.

Reply

Marsh Posté le 08-03-2005 à 16:12:38   

Reply

Marsh Posté le 09-03-2005 à 22:41:56    

C'est vrai que je ne comprends pas.
Il faudrait voir la feuille avec son contenu et le résultat que tu cherches à obtenir.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 10-03-2005 à 01:14:03    

Je cherche à comparer des lignes d'une feuille excel.
Chaque ligne va de la case A à la case V.
La case A est la concataination des cases BàF, possede une valeur pour toutes les lignes.
Pour chaque ligne, soit il y a des valaur danss les cases  G et H, soit dans les cases IJKLMN, soit dans les cases OPQRSTUV.
Je veux regrouper toutes ces données sur une même ligne pour une même valeur de la colonne A, mais il y a des exception, une valeur de la colonne A peut correspondre à une ou plusieurs lignes, jusqu'a six, et il ne faut pas perdre de données.
 
La feuille comporte 5000 lignes
 
J'ai fait un algorythme qui part du principe d'une double boucle toute simple.
La premiere boucle va de la premiere ligne à la derniere ligne de la feuille
La deuxieme boucle compare la premiere ligne avec les lignes suivantes de la feuille
 
 
Si les cases H de la 1ere ligne est vide et que la case H de la deuxieme ligne ne l'est pas alors je deplace les cases G et H de la deuxieme ligne à la premier et je note "deplacé" dans les cases G et H de la deuxieme pour garder une trace du deplacement.
De même je compare les cases I entre elles pour deplacer les cases IJKLMN de la deuxieme ligne à la premiere.
Les cases O pour les cases OPQRSTUV
 
Après je ferai un tri tout bête pour reperer les erreures et effacer tous les "deplacé" qui sont dans les cases GàV, mais ce sera une autre histoire (ça je sais faire)
 
Pour aider à la lecture de mon algorythme, voici mes abreviations
<>                   different de  
variable(a)          le nom d'une variable
case(Avariable(a))   case A2 si variable(a)=2
 
 
J'espere être une peu plus clair.
Merci.


Message édité par chocolat100 le 10-03-2005 à 01:22:49
Reply

Marsh Posté le 10-03-2005 à 10:34:31    

bonjour,
la macro suivante fait un regroupement, je pense que c'est à peu près ce que tu veux.

Code :
  1. Option Base 1
  2. Sub Test()
  3. Dim Tablo(22), iNbCol%, iLastR%, i%, j%, x%, vReq, iTrouv%
  4. Application.ScreenUpdating = False
  5. iNbCol = 22
  6. iLastR = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
  7. For i = 1 To iLastR
  8.   For x = 1 To 22
  9.   Tablo(x) = Cells(i, x).Value
  10.   Next
  11. Set vReq = Range("A" & i & ":A" & iLastR).Find(Tablo(1))
  12.   If Not vReq Is Nothing Then
  13.     Do
  14.     iTrouv = vReq.Row
  15.     For j = 1 To 22
  16.        With Cells(iTrouv, j)
  17.         If Tablo(j) = .Value Then
  18.           If j <> 1 Then
  19.             If .Value <> "" Then
  20.             .Interior.ColorIndex = 8
  21.             .Value = ""
  22.             End If
  23.           End If
  24.         ElseIf Tablo(j) = "" And .Value <> "" Then
  25.         Tablo(j) = .Value
  26.         .Interior.ColorIndex = 8
  27.         .Value = ""
  28.         ElseIf Tablo(j) <> "" And Tablo(j) <> .Value Then
  29.         If .Value <> "" Then .Interior.ColorIndex = 3
  30.         End If
  31.         Cells(i, j).Value = Tablo(j)
  32.      End With
  33.      Next
  34.     Set vReq = Range("A" & i & ":A" & iLastR).FindNext(vReq)
  35.     iTrouv = vReq.Row
  36.     Loop While Not vReq Is Nothing And iTrouv <> i
  37.   End If
  38. Next
  39. End Sub


Les déplacements sont colorés en bleu.
Les erreurs en rouge.
 
A+

Reply

Sujets relatifs:

Leave a Replay

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