Algorithme Excel

Fermé
Alain - 3 févr. 2009 à 10:13
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 4 févr. 2009 à 22:42
Bonjour à tous,

Je suis en face d'un probleme qui me depasse totalement... Il s'agit de traiter un fichier excel de plusieurs centaines de lignes.
Le principe est simple mais ayant tres peu de connaissance en programmation, je suis perdu..

Pour simplifier ma requete, je vais vous donner un petit exemple, ca sera plus parlant.

A B C

F2 1 10
88 2 10
88 2 100 <---
F2 2 100 <---
88 2 1000

Les fleches indiquent les parties qui m'interressent pour les conditions suivantes (dans l'ordre):

Les deux lignes de la colonne C sont identiquent (premiere condition)
Les deux lignes de la colonne A sont differentes (2 ieme)
Et enfin les deux lignes de la colonne B sont identiques.

A chaque fois que le "programme" tombe sur ces 3 conditions, je voudrais incrementer un compteur et mettre le resultat dans une cellule (J1)...

J'ai lu des articles et des cours sur le VBA mais cela me parait insurmontable vu mes capacités.. Mon probleme resulte d'une mauvaise generation du fichier excel et je n'ai plus moyen de le generer... et pas assez de temps pour retraiter ce fichier à la main......

Pouvez vous m'aider ?

D'avance merci,

Alain.

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
3 févr. 2009 à 10:34
bonjour

Tu peux utiliser cet algorithme :
Public Sub somme()
Dim lig As Long
[J1].Value = 0
For lig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
    If Cells(lig, 1).Value <> Cells(lig + 1, 1).Value _
        And Cells(lig, 2).Value = Cells(lig + 1, 2).Value _
        And Cells(lig, 3).Value = Cells(lig + 1, 3).Value Then
            [J1].Value = [J1].Value + 1
    End If
Next lig
End Sub
4
Bonjour gbinforme,

Tout d'abord merci pour ta reponse (rapide !). Ca fait vraiment plaisir de savoir qu'il y a encore des gens pret à aider. Ca me redonne fois en l'humanité :)

Je viens de tester ton algorithme sur une partie de mon fichier excel que j'avais traiter à la main pour voir si ca collait mais je ne retrouve pas le meme resultat...
Je vais essayer de comprendre ton algo, dis moi si je me trompe... car j'ai quelques notions mais ca date un peu :/

Public Sub somme() ----------Creation de la macro
Dim lig As Long ----------Creation d'une variable 32-bit
[J1].Value = 0 ----------Initialisation de J1 à 0

Jusque la ca va je pense !

For lig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row ---------- Boucle qui parcours le tableau ?
If Cells(lig, 1).Value <> Cells(lig + 1, 1).Value _ ----------Test de difference (ligne n et n+1) colonne A

And Cells(lig, 2).Value = Cells(lig + 1, 2).Value _ ----------alors test d'égalité (ligne n et n+1) colonne B


And Cells(lig, 3).Value = Cells(lig + 1, 3).Value Then ----------alors test d'égalité (ligne n et n+1) colonne C

[J1].Value = [J1].Value + 1 -----------Incrementation de J1
End If
Next lig
End Sub


Je pense que le resultat est faux (pour une question d'ordre) car il test d'abord si deux lignes successives dans la colonne A sont differentes. et pres il effectue les autres tests. Seulement il faut commencer par la troisieme, sinon ca change tout.

J'ai donc interverti deux lignes pour voir mais cela ne fonctionne pas non plus....

Public Sub somme()
Dim lig As Long
[J1].Value = 0
For lig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
If Cells(lig, 3).Value = Cells(lig + 1, 3).Value _ --------------------D'abord je teste la 3ieme colonne

And Cells(lig, 1).Value <> Cells(lig + 1, 1).Value _ ----------------------------------Ensuite je test la premiere

And Cells(lig, 3).Value = Cells(lig + 1, 3).Value Then ---------------------------------------et enfin la deuxieme

[J1].Value = [J1].Value + 1
End If
Next lig
End Sub



pour le test j'ai supprimé toutes les colonnes superflues pour n'avoir que les 3 interressantes comme dans mon exemple.

Car en verité ce sont les colonnes A, E et F dans le fichier qui m'interresse.

Il faut d'abord tester si il y a deux lignes identiques successives dans la colonne F.
Si c'est le cas, tester si ces memes lignes dans la A sont differentes
Enfin, si toujours les meme lignes dans la colonne E sont identiques, alors incrementer J1.

Je ne m'en sort pas..... est-ce compliqué de colorier les lignes interressantes ? comme ca je pourrais voir tout de suite si ca colle avec le partie que j'ai deja traité.

En tout cas merci encore pour ton aide,
Dans l'attente, je vais continuer a bidouiller et comprendre un peu le fonctionnement des macros.
0