Déclenchement ListBox -

Oui je comprends. Si vous êtes ok, procédons par étapes.

Je me rends compte que le programme qui m'est demandé est plus complexe que prévu, j'avais mal cerné le problème au début.

Pour simplifier cette histoire de dates, je vous propose de faire une étape intermédiaire qui consiste à trier les 2 fichiers lors de leur ajout en cliquant sur les boutons load table avant de lancer le programme (la comparaison des dates sera plus simple par la suite)

1) Tableau_1

= > Surligner en jaune les lignes à comparer

cad pour chaque "CLIENT REFERENCE", les lignes dont le "CUM%" est le plus grand (Voir ex)

Supprimer les autres lignes

2) Tableau_2

=> Surligner en jaune les lignes à comparer

cad pour chaque "Document Client Reference", les lignes qui ont le plus grand "Revision Number" (Voir ex)

Supprimer les autres lignes

(Le tri croissant du fichier pour chaque Revision Number est déjà fait lors de l'ajout du doc. dans le ListBox_2 ou clic sur bouton dans l'esemple)

L'idée sera ensuite de comparer pour chaque référence les lignes jaunes (c'est a ce moment là que le problème sur les dates interviendra)

Merciii, heureusement pour moi que vous êtes la

15doc-from-pdbc.xlsm (69.99 Ko)

Bonjour (c'est la dernière fois que je le précise - tu fais comme tu veux)

Banzai64 a écrit :

Tu prépares un fichier dans lequel tu indiques ce que tu choisis comme option et manuellement tu colorises la colonne date soit en rouge ou en vert en disant pourquoi

Si ce sont les mêmes fichiers ne les renvoies plus

Bjr, oui ce sont les mêmes fichiers.

Vous l'avez compris, mes fichiers de départ comportent des doublons (l'étape que je proposais juste avant était de simplifier les fichiers en supprimant les lignes qui ne sont pas intéressantes dans les 2 tableaux (j'avais simuler manuellement sur les P-J précédentes)).

Une fois ce tri fait, on compare les deux tableau avec les jeux couleurs suivant :

  • Document : Présent (En vert), Manquant (En rouge), sans numéro (Gris)
  • MSCode : Identique (En vert), Différent (En rouge), sans MSCode (Gris)

Venons-en aux dates (Explication dans le fichier Word ci-joint)

J'ai essayé d'être le plus clair possible

Merci

Bonjour

J'ai modifié le code de comparaison de date

C'est quoi un doublon dans le fichier ?

Dans le code je t'ai posé une question

Bjr,

J'essaie de répondre au mieux aux 2 questions

1)

If Not Cel Is Nothing Then
          Ligne = Cel.Row
          Depart = Cel.Address
          Kase.Interior.ColorIndex = 10  ' Vert
          Kase.Font.Color = vbBlack

          ' ??????????????????????????????????????????????????????????????????????????????????????????????????????
          ' C'est quoi absence de référence
          ' ??????????????????????????????????????????????????????????????????????????????????????????????????????
          'Absence de Référence
          If IsEmpty(Cel) Then
            Kase.Interior.ColorIndex = 15  ' Gris
            Kase.Font.Color = vbWhite
            Kase.Borders(xlDiagonalUp).LineStyle = xlContinuous
            Kase.Borders(xlDiagonalDown).LineStyle = xlContinuous
          End If

Le fichier a comparer est très grand. Pour certains documents, le numéro "CLIENT REFERENCE", colonne F est manquant, j'ai ainsi essayé d'écrire les lignes de codes ci-dessus pour mettre les cases en gris. (Voir image)

2)

J'ai modifié le code de comparaison de date

C'est quoi un doublon dans le fichier ?

Dans mes fichiers sources (Tableau_1 et 2), pour chaque numéro (CLIENT REFERENCE ou Document Client Reference) il y a souvent plusieurs lignes pour un seul numéros. J'appelle doublon les lignes qui ne m’intéressent pas (Celles qui sont en orange sur le doc word)

Tableau_1 : Garder pour chaque numéro la ligne qui a le plus grand CUM%

Tableau_2 : Garder pour chaque numéro la ligne qui a le plus grand Revision Number

Vous me suivez ?

Merci

absence reference

Bonjour

Pour ta 1ère réponse je ne savais pas car dans le fichier que tu as posté toutes les lignes ont une référence

J'ai modifié le code à ce sujet

Les tableaux sont débarrassés des lignes inutiles ( à bien vérifier)

Bjr, doc bien reçut,

Je vais faire une série de test,

Merci encore pour votre aide précieuse

Bjr,

A priori ça fonctionne bien

J'ai simplement 1 interrogation :

Cette partie de code est-elle nécessaire du fait que le fichier soit trié avant ?

If Application.Subtotal(103, .Columns("F")) > 1 Then
      For Each Kase In .Range("F2:F" & NbLg).SpecialCells(xlCellTypeVisible)

        ' Absence de CLIENT REFERENCE
        If IsEmpty(Kase) Then
          Kase.Interior.ColorIndex = 15  ' Gris
          Kase.Borders(xlDiagonalUp).LineStyle = xlContinuous
          Kase.Borders(xlDiagonalDown).LineStyle = xlContinuous
        Else
          Set Cel = Sheets("Document").Columns("F").Find(what:=Kase, LookIn:=xlValues, lookat:=xlWhole)
          If Not Cel Is Nothing Then
            Ligne = Cel.Row
            Depart = Cel.Address
            Kase.Interior.ColorIndex = 10  ' Vert
            Kase.Font.Color = vbBlack

Do
              ' Prendre la dernière version si plusieurs Revision Number
              If Cel.Offset(0, -3) > Sheets("Document").Range("C" & Ligne) Then
                Ligne = Cel.Row
              End If
              Set Cel = Sheets("Document").Columns("F").FindNext(Cel)
            Loop While Depart <> Cel.Address 

Merci

Bonjour

Tu as fortement raison, normalement comme dans le fichier il ne reste que la ligne avec la valeur de révision la plus haute on peut s'affranchir de ce test

Pour en être vraiment sur, comme tu disposes de plus de fichier de données que moi, places un point d'arrêt sur la ligne surlignée

              ' Prendre la dernière version si plusieurs Revision Number
              If Cel.Offset(0, -3) > Sheets("Document").Range("C" & Ligne) Then
               Ligne = Cel.Row
              End If

et fais des tests

Si jamais il n'y a d'arrêt on pourra modifier le code

A toi de dire

Après plusieurs test, il n'y a pas d'arrêt sur cette ligne, c'est bon signe

Je peux ainsi supprimer le bloc ?

Bonjour

En principe , cela est fait dans cette version

A vérifier

Ok parfait,

Je dois attendre quelques jours pour faire des tests plus précis,

Je ne suis pas sur que le tri initial sur Tableau_1 soit fiable à 100%, je vous dirai si besoin d'aide

Merci bcp

Bjr,

J'ai testé la macro, c'est tout bon.

J'ai fais pas mal de modification mais je suis bloqué. J'ai besoin de modifier un peu la macro.

Lors de la comparaison des MSCode, au début nous comparions chaque lignes des 2 tableaux Si ok en vert, si non ok en rouge, code ci-dessous :

            If Kase.Offset(0, 8) <> Sheets("Document").Range("E" & Ligne) Then
              Kase.Offset(0, 8).Interior.ColorIndex = 3  ' Rouge
              Kase.Offset(0, 8).Font.Color = vbBlack
              .Rows(Kase.Row).Copy Sheets("Error on the MSCode").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
              Sheets("Error on the MSCode").Columns("A:U").Columns.AutoFit
            Else
              Kase.Offset(0, 8).Interior.ColorIndex = 10  ' Vert
              Kase.Offset(0, 8).Font.Color = vbBlack
            End If

J'aimerais maintenant complexifier.

Comparer MSCode selon :

  • AFCE dans Tableau_2 avec IFCE , IFC1E..dans Tableau_1
  • AFDE dans Tableau_2 avec IDDE, IDD1E..dans Tableau_1

Je pensais utiliser un Select Case

Ebauche code :

            Select Case Cel.Offset(0, -1)
              Case Is = "AFCE"
                  If Kase.Offset(0, 8) <> "IFCE" Or Kase.Offset(0, 8) <> "IFC1E" Or Kase.Offset(0, 8) <> "IFC2E" _
                    Or Kase.Offset(0, 8) <> "IFC3E" Or Kase.Offset(0, 8) <> "IFC4E" Or Kase.Offset(0, 8) <> "IFC5E" Then
                      Kase.Offset(0, 8).Interior.ColorIndex = 3  ' Rouge
                      Kase.Offset(0, 8).Font.Color = vbBlack
                      .Rows(Kase.Row).Copy Sheets("Error on the MSCode").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                      Sheets("Error on the MSCode").Columns("A:U").Columns.AutoFit
                  Else
                      Kase.Offset(0, 8).Interior.ColorIndex = 10  ' Vert
                      Kase.Offset(0, 8).Font.Color = vbBlack
                  End If

              Case Is = "AFDE"
                  If Kase.Offset(0, 8) <> "IDDE" Or Kase.Offset(0, 8) <> "IDD1E" Or Kase.Offset(0, 8) <> "IDD2E" Or Kase.Offset(0, 8) <> "IFDE" Then
                      Kase.Offset(0, 8).Interior.ColorIndex = 3  ' Rouge
                      Kase.Offset(0, 8).Font.Color = vbBlack
                      .Rows(Kase.Row).Copy Sheets("Error on the MSCode").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                      Sheets("Error on the MSCode").Columns("A:U").Columns.AutoFit
                  Else
                      Kase.Offset(0, 8).Interior.ColorIndex = 10  ' Vert
                      Kase.Offset(0, 8).Font.Color = vbBlack
                  End If
             End Select

Que pensez-vous de ma méthode ?

Avez-vous une idée de pk ça ne fonctionne pas ?

Merci bcp

Bonsoir

Ton programme plante dans la fonction "Function CelColOù(ByVal CelDéb As Range, ColQuoi, ByVal Opé As String, ByVal Valeur) As Range" avec les fichiers que j'ai

sinon la réponse que tu as eue sur l'autre forum ne te convient pas ?

Ça m'agace moyennement d'avoir déjà une réponse et d'en demander une autre

Bjr,

Problème résolut.

J'ai le droit de poser des questions sur plusieurs forum, je ne vois pas le problème.

Je te remercie vraiment de l'aide que tu m'as apporté pour la création de ce programme,

Cdt

Bonjour

Franchement ta demande auprès de plusieurs forum ne me gène pas

C'est que tu as obtenu une réponse qui te sied

Bjr,

Merci bcp pour vos rapides réponses !

J'ai une préférence pour celle de Dranreb, elle est plus compacte

Merci !!

Et tu viens en chercher une autre ici

Ce n'est ni sympa pour celui qui t'a répondu ni pour moi

Mais bon on ne vit pas dans un monde de bisounours

Rechercher des sujets similaires à "declenchement listbox"