Test d'égalité avec nombre de lignes variable

Bonjour à tous,

Je viens aujourd'hui à vous car je desespère de trouver la solution !

Voici le contexte : J'ai 850 dossiers qui contiennent un nombre variable de fichiers PDF.

  • Chaque dossier a un numéro codé qui lui est propre a 7 chiffres. (1234567) (Colonne B)
  • Chaque fichier PDF a un nombre variable de caractère mais commencent toujours par les 7 premiers chiffres du dossier racine. (1234567XYZXYZ) (colonne A)

Tous ces fichiers PDF ont été copier -> collé dans ces dossiers manuellement. Avant de valider le travail, j'aimerais vérifier qu'un fichier PDF ne soit pas dans le mauvais dossier : Exemple un fichier commençant par 4567890 dans le dossier 1234567 !

Afin d'obtenir la liste des fichiers depuis ces dossiers j'ai effectué dans l'invite de commande : Dir/s>test.xls. J'ai donc reçu une liste exhaustive mais maintenant j'aimerais trouver une formule excel (ou VBA?) afin de faire un test d'égalité. Je pensais à un si mais vu que le nombre de fichiers PDF peut-être variable, je ne sais pas comment le dire à la formule.

J'ai mis un fichier test en pièce jointe.

J'espère que ma description de la situation est claire, dans le cas contraire je me tiens à votre disposition si question il y a !

Merci d'avance,

Jacques.

14test.xlsx (12.44 Ko)

Bonjour,

A voir,

j'ai rajouté une colonne (B)pour la prise en compte des 7 premiers chiffres de la colonne A

11test-doublons.xlsm (25.23 Ko)

Re,

Le meme sans rajout de colonne

10test-doublons.xlsm (25.43 Ko)

Cela fonctionne merci beaucoup

Bon week-end

Bonjour,

Bonjour,

Le code apporté dans la solution fonctionne très bien. Toutefois, j'aurais peut-être à le modifier prochainement, d'ou l'importance que je comprenne comment il fonctionne.

J'ai fais pas mal de VBA il y a 3 ans et je dois avouer que me remettre dedans est plus compliqué que je ne l'aurais pensé. C'est pourquoi, j'aimerais savoir si quelqu'un ici pouvait m'expliquer cette partie du code :

 For Each c In plage1
     If Left(c, 7) <> "" Then d1(Left(c.Value, 7)) = d1(Left(c.Value, 7)) + 1
  Next c
  For Each c In plage2
  If c <> "" Then d2(c.Value) = d2(c.Value) + 1
    If d1.exists(Left(c.Value, 7)) Or c = "" Then
    c.Interior.ColorIndex = xlNone
    Else
    c.Interior.ColorIndex = 3
    End If
  Next c
  For Each c In plage1
    If d2.exists(c.Value) Or c = "" Then c.Interior.ColorIndex = xlNone
    If d1(Left(c.Value, 7)) > 1 Or c = "" Then
    c.Interior.ColorIndex = xlNone
    Else
    c.Interior.ColorIndex = 3
    End If
  Next c
  For Each c In plage2
    If d2(c.Value) > 1 Then c.Interior.ColorIndex = xlNone
  Next c
End Sub

1) Je comprends l'utilisation de la boucle dans ce cas présent, mais j'ai de la peine avec les arguments.

"For each c in plage 1"... Dans ce cas, à quoi correspond le "c"? J'ai cherché si la variable avait été déclaré plus haut mais ce n'était pas le cas, donc à quoi correspond ce "c"?

2)" If Left(c, 7) <> "" Then d1(Left(c.Value, 7)) = d1(Left(c.Value, 7)) + 1 "

Ici, si je comprends bien cela revient à faire une comparaison "Gauche, 7 premiers caractères". Ensuite après le "<>" je ne comprends pas l'utilisation du "". Ensuite, je ne comprends pas cette partie: Then d1(Left(c.Value, 7)) = d1(Left(c.Value, 7))

3) Pareil pour celle-ci "If c <> "" Then d2(c.Value) = d2(c.Value) + 1

If d1.exists(Left(c.Value, 7)) Or c = "" Then"

4) For Each c In plage2

If d2(c.Value) > 1 Then c.Interior.ColorIndex = xlNone

Et celle ci non plus ! Comme vous pouvez le constater, j'ai de la peine avec les boucles !

Merci à ceux qui prendront le temps de m'aider à y voir plus clair,

bon dimanche.

Bonjour,

Si tu as fais beaucoup de VBA auparavent, tu dois connaitre la fenêtre "Espions".

Tu places les valeurs à inspecter, et en lancant la macro en pas à pas, tu verras à quoi correspond les valeurs que tu demandes à espionner

Ce qui m'intéresse dans la compréhension du code c'est la logique derrière les lignes.

Je pense que je comprendrais mieux comme cela. Si tu as 5 minutes à disposition pour m'expliquer cela, ce serait top

Quoi de plus logique que de voir la valeur de la cellule dans la fenêtre espion en déroulement pas à pas de la macro

et avec ta compréhension , tu mettras tes commentaires dans le module, et tu comprendras beaucoup plus vite son déroulement

Je n'arrive pas à obtenir les résultats que je veux à travers la fenêtre espion. Certainement que je ne ne le fais pas correctement.

Etant donné que M12 ne semble pas disposé m'expliquer son code, quelqu'un pourrait-il svp répondre à mes questions?

Merci.

Bonjour,

c est un range. Met l'expression c.address en espion.

eric

Bonsoir,

J'aimerais ajouter une condition à ma demande initiale.

Si les cellules dans la colonne A, à partir du 8ème caractère contient :

  • 0326
  • 0023

J'aimerais que ces deux cellules soit colorié en une couleur (sauf rouge)

J'ai essayé d'intégrer ceci dans le code de M12 mais force est de constater que je n'y arrive pas.

Quelqu'un aurait-il la solution?

Merci et bonne soirée.


eriiic a écrit :

Bonjour,

c est un range. Met l'expression c.address en espion.

eric

Merci pour ta réponse. Comment je dois procéder depuis la fenêtre espion? C'est à dire quels sont les critères que je dois rentrer ? Je n'ai jamais utilisé la fenêtre espion.

Merci

9test.xlsx (12.85 Ko)

Si.

Pourquoi vouloir cela dans une macro rigide alors qu'une simple MFC le fait ?

eric

Car j'aimerais le savoir par dossier. En gros pour chaque dossier qui se trouve en colonne B, ces 2 fichiers doivent s'y trouver.

Bonjour,

ta question n'était pas

Si les cellules dans la colonne A, à partir du 8ème caractère contient :

  • 0326
  • 0023

J'aimerais que ces deux cellules soit colorié en une couleur (sauf rouge)

?

Quel est le pb avec une MFC ?

Oui, mais j'aurai du préciser que c'est en rapport avec le dossier qui se trouve en colonne B. En gros chaque dossier en colonne B doit avoir ces fichiers en correspondance dans la colonne A

Merci de déposer un fichier qui explique ton problème.

eriiic a écrit :

Merci de déposer un fichier qui explique ton problème.

Bonsoir Eric,

Je n'ai pas pu écrire avant car trop de boulot jusqu'à cette après-midi. J'ai résolu le problème manuellement (c'était long, long et long ! ) mais à l'avenir, j'aimerais pouvoir y trouver une solution intelligente, donc je reviens vers toi avec le fichier demandé et je vais tenter d'être plus exhaustif dans mon explication.

Dans la colonne A "Fichiers" se trouve une série de fichiers. La colonne B contient les noms de dossiers relatifs à ces fichiers. La colonne C est une colonne de check.

Je vais un peu modifier ma question afin d'utiliser cette colonne de check. Chaque dossier contient une série de fichiers qui sont dans la colonne A. Certains fichiers ne sont pas importants mais d'autres, si. Chaque fichier porte un numéro codé.

1234567 - Fait référence au dossier (Caractère 1 à 7)

1234 (Caractère 8 a 12) Fait référence au type de fichier

.... (Suite de chiffres ou lettres pas importants.

J'aimerais identifier les dossiers parmi lesquelles les types de fichiers :

  • 0326
  • 0023
Sont présents.

Si tel est le cas, dans la colonne C (Check) j'aimerais qu'il soit marqué "Complet", si ce n'est pas le cas "Incomplet".

Merci d'avance.

7test.xlsx (12.83 Ko)

Bonjour,

il faut que le nom du dossier soit présent sur chaque ligne.

J'ai ajouté un retour supplémentaire "Dossier ?" si il ne correspond pas.

eric

edit : ou par macro, fichier xlsm

9test.xlsx (13.74 Ko)
9test.xlsm (22.35 Ko)

Bonjour Eric,

Merci pour ta solution.

Toutefois, le mot "incomplet" s'affiche lorsque cela n'a pas lieu d'être. Par exemple, ligne C5 à C10, cela ne devrait rien afficher car que ces fichiers soient présent ou pas dans le dossier, ce n'est pas important. Toutefois, les :

  • 0326
  • 0023
Eux, sont important et en ce sens la c'est correct. Est-il possible d'enlever le incomplet pour les lignes C5 à C10 (et les autres dans ce cas) ?

Merci et bonne journée

Rechercher des sujets similaires à "test egalite nombre lignes variable"