Algorithme Excel

[Fermé]
Signaler
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
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

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 530
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

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.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 530
bonjour

Merci pour ton sympathique message car c'est vraiment plaisant d'avoir un retour chaleureux pour continuer de vivre ensembles.

Savoir que l'on peut rendre service est agréable mais lorsque c'est réciproque et partagé c'est vraiment top !
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 530
bonjour

Les trois tests sont dans la même "instruction" et donc l'ordre n'a pas d'importance puisqu'il faut les 3 conditions réunies.

Si tu veux tester E et F cela devient :
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, 5).Value = Cells(lig + 1, 5).Value _
        And Cells(lig, 6).Value = Cells(lig + 1, 6).Value Then
            [J1].Value = [J1].Value + 1
    End If
Next lig
End Sub


Si tu veux mettre en couleur :
- sélection colonnes A à F
- menu format / mise en forme conditionnelle
- condition 1 tu choisis "la formule est"
- à côté tu mets la formule suivante
=ET($A1<>$A2;$E1=$E2;$F1=$F2)

- avec "format" tu choisis ta couleur puis "ok" 2 fois

Ta première ligne répondant aux conditions est en couleur et si tu as 2 lignes ou plus colorées cela signifie que tes lignes binômes cherchées sont des trinômes ou plus et c'est sans doute pour cela que tu n'est pas d'accord avec le résultat de la macro.
Re bonjour gbinforme,

Effectivement, si les 3 conditions doivent etre reunis, l'ordre ne sert à rien..... ou avais-je la tete.

Sinon c'est que l'erreur est due au fait que je n'ai pas choisis les bonnes conditions..

Ce qui est important c'est qu'a chaque binome ( il n'y a que des binomes ) les informations sont "successives". mais on peux retrouver les meme infos un peu partout dans le fichier, comme dans mon exemple. Cela peut creer des redondances non ?


A B C

F2 2 100
88 2 10
88 2 100 <--- 1ier cas, VRAI car infos successives
F2 2 100 <---
88 2 1000


A B C

F2 2 100 <--- 2ieme cas, detecté par la macro, mais faux, car non successif
88 2 10 |
88 2 100 <---
F2 2 100
88 2 1000

Je me trompe peut etre... je vais relire calmement le programme et le derouler de tete en parcourant une partie de mon tableau, pour voir ou il peut se tromper. Je trouve presque le double du resultat attendu, je devrais tomber sur au moins une erreur :)

Je vais manger, et je te tiens au courant des que possible,
Merci encore, vraiment

Alain
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 530
bonjour

F2 2 100 <--- 2ieme cas, detecté par la macro, mais faux, car non successif
88 2 10 |
88 2 100 <---
F2 2 100
88 2 1000


Non la macro ne va pas détecter car il luis faut 3 conditions vraies :
F2 <> 88 >= vrai
2 = 2 >= vrai
100 = 10 >= faux et donc non détecté

Par contre :
F2 2 100
88 2 10
88 2 100 <--- 1ier cas, VRAI car infos successives
F2 2 100 <--- 2ème cas, VRAI car infos successives
88 2 100

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 530
bonjour

Pour ne pas tenir compte des cellules vides et supprimer les erreurs éventuelles dues à des espaces dans les cellules tu peux essayer cette version un peu plus complète :
Public Sub somme()
Dim lig As Long
[J1].Value = 0
For lig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
    If Replace(Cells(lig, 1).Value, " ", "") <> Replace(Cells(lig + 1, 1).Value, " ", "") _
        And Replace(Cells(lig, 5).Value, " ", "") = Replace(Cells(lig + 1, 5).Value, " ", "") _
        And Replace(Cells(lig, 6).Value, " ", "") = Replace(Cells(lig + 1, 6).Value, " ", "") _
        And Cells(lig, 1).Value <> "" And Cells(lig + 1, 1).Value <> "" _
        And Cells(lig, 5).Value <> "" And Cells(lig + 1, 5).Value <> "" _
        And Cells(lig, 6).Value <> "" And Cells(lig + 1, 6).Value <> "" Then
            [J1].Value = [J1].Value + 1
    End If
Next lig
End Sub
Bonjour !

Probleme resolu !
et des semaines de traitement faites en un clic !

Merci beaucoup Gbinforme ;) tu m'as fait gagner un temps precieux, je ne sais comment te remercier !
Je me repete mais c'est bien de savoir qu''il y a des gens bien sur cette planete, tout compte fait ;)

Bonne continuation !