Listview, VBA, Excel

Résolu
Bonjour,

Après avoir passé la journée au complet là-dessus, je ne trouve toujours pas.
C'est un code qui fonctionne normalement (dans d'autres usf) et même qu'il a fonctionné une fois ou deux et maintenant il ne veut plus.. Je n'y comprend rien.

les entêtes de colonnes appraissent dans ma listview et le quadrillage se met mais les données ne viennent pas.. Quelqu'un à une idée de ce qui cloche svp?
Je ne vous met que le code pour l'instant mais si vous avez besoin du fichier, juste à me le dire!

Le but est de dire si : Avec ma feuille infos, si la données de la première colonne de ma feuille info est égale à ma tbox_lot1 et que (avec ma feuille infos )si la données de la colonne 4 est égale à ce qui se trouve SOIT dans ma tbox54 OU tbox56 alors je fais venir la ligne (pas au complet)dans ma listview...

Voici mon code

Private Sub Cmd1_click() ' lot, emplir Listview

Dim x
Dim i As Byte
Dim sh As Worksheet

With ListView1: .Gridlines = True: .View = 3: .FullRowSelect = True
With .ColumnHeaders
.Clear
Set sh = Worksheets("infos")

.Add , , sh.Cells(3, 4).Value, 50
.Add , , "Sel/M", 42
.Add , , "%", 35
.Add , , " Prix Sel/M", 48
.Add , , "1Com", 42
.Add , , "%", 35
.Add , , " Prix 1Com", 48
.Add , , "2Com", 42
.Add , , "%", 35
.Add , , " Prix 2Com", 48
.Add , , "3Com", 42
.Add , , "%", 35
.Add , , " Prix 3Com", 48
.Add , , "3B", 42
.Add , , "%", 35
.Add , , " Prix 3B", 48
.Add , , "Pal", 42
.Add , , "%", 35
.Add , , " Prix Pal", 48
.Add , , "Autre", 42
.Add , , "%", 35
.Add , , " Prix Autre", 48
End With

Set sh = Worksheets("infos")

For Each x In sh.Range("A6:A" & Cells(Rows.Count, 1).End(xlUp).Row)
' Va trouver le lot demandé dans textbox3
If x.Value = TBox_Lot1.Value And Cells(x.Row, 4).Value = TextBox54.Value Or Cells(x.Row, 4).Value = TextBox56.Value Then

Set sh = Worksheets("infos")

With .listitems
.Add , , sh.Cells(x.Row, 4)
End With

With .listitems(.listitems.Count).ListSubItems

.Add , , sh.Cells(x.Row, 11) + sh.Cells(x.Row, 14) + sh.Cells(x.Row, 17) + sh.Cells(x.Row, 20) + sh.Cells(x.Row, 23) ' grade Sel/m
.Add , , sh.Cells(x.Row, 12) + sh.Cells(x.Row, 15) + sh.Cells(x.Row, 18) + sh.Cells(x.Row, 21) + sh.Cells(x.Row, 24) ' % Sel/m
If sh.Cells(x.Row, 11) + sh.Cells(x.Row, 14) + sh.Cells(x.Row, 17) + sh.Cells(x.Row, 20) + sh.Cells(x.Row, 23) > 0 Then
.Add , , sh.Cells(x.Row, 13) + sh.Cells(x.Row, 16) + sh.Cells(x.Row, 19) + sh.Cells(x.Row, 22) + sh.Cells(x.Row, 25) + sh.Cells(x.Row, 89) ' prix Sel/m
Else: .Add , , sh.Cells(x.Row, 13) + sh.Cells(x.Row, 16) + sh.Cells(x.Row, 19) + sh.Cells(x.Row, 22) + sh.Cells(x.Row, 25)
End If
.Add , , sh.Cells(x.Row, 26) + sh.Cells(x.Row, 29) + sh.Cells(x.Row, 32) + sh.Cells(x.Row, 35) + sh.Cells(x.Row, 38) ' grade 1com
.Add , , sh.Cells(x.Row, 27) + sh.Cells(x.Row, 30) + sh.Cells(x.Row, 33) + sh.Cells(x.Row, 36) + sh.Cells(x.Row, 39) ' % 1com
If sh.Cells(x.Row, 26) + sh.Cells(x.Row, 29) + sh.Cells(x.Row, 32) + sh.Cells(x.Row, 35) + sh.Cells(x.Row, 38) > 0 Then
.Add , , sh.Cells(x.Row, 28) + sh.Cells(x.Row, 31) + sh.Cells(x.Row, 34) + sh.Cells(x.Row, 37) + sh.Cells(x.Row, 40) + sh.Cells(x.Row, 89) ' prix 1com
Else: .Add , , sh.Cells(x.Row, 28) + sh.Cells(x.Row, 31) + sh.Cells(x.Row, 34) + sh.Cells(x.Row, 37) + sh.Cells(x.Row, 40)
End If
.Add , , sh.Cells(x.Row, 41) + sh.Cells(x.Row, 44) + sh.Cells(x.Row, 47) ' grade 2 com
.Add , , sh.Cells(x.Row, 42) + sh.Cells(x.Row, 45) + sh.Cells(x.Row, 48) ' % 2 com
If sh.Cells(x.Row, 41) + sh.Cells(x.Row, 44) + sh.Cells(x.Row, 47) > 0 Then
.Add , , sh.Cells(x.Row, 43) + sh.Cells(x.Row, 46) + sh.Cells(x.Row, 49) + sh.Cells(x.Row, 89) ' prix 2 com
Else: .Add , , sh.Cells(x.Row, 43) + sh.Cells(x.Row, 46) + sh.Cells(x.Row, 49)
End If
.Add , , sh.Cells(x.Row, 50) + sh.Cells(x.Row, 53) + sh.Cells(x.Row, 56) ' grade 3 com
.Add , , sh.Cells(x.Row, 51) + sh.Cells(x.Row, 54) + sh.Cells(x.Row, 57) ' % 3 com
If sh.Cells(x.Row, 50) + sh.Cells(x.Row, 53) + sh.Cells(x.Row, 56) > 0 Then
.Add , , sh.Cells(x.Row, 52) + sh.Cells(x.Row, 55) + sh.Cells(x.Row, 58) + sh.Cells(x.Row, 89) ' prix 3 com
Else: .Add , , sh.Cells(x.Row, 52) + sh.Cells(x.Row, 55) + sh.Cells(x.Row, 58)
End If
.Add , , sh.Cells(x.Row, 59) ' grade 3B com
.Add , , sh.Cells(x.Row, 60) ' % 3B com
If sh.Cells(x.Row, 59) > 0 Then
.Add , , sh.Cells(x.Row, 61) + sh.Cells(x.Row, 89) ' prix 3B com
Else: .Add , , sh.Cells(x.Row, 61)
End If
.Add , , sh.Cells(x.Row, 62) ' grade pal
.Add , , sh.Cells(x.Row, 63) ' % pal
.Add , , sh.Cells(x.Row, 64) ' prix pal
.Add , , sh.Cells(x.Row, 65) + sh.Cells(x.Row, 68) + sh.Cells(x.Row, 71) + sh.Cells(x.Row, 74) + sh.Cells(x.Row, 77) + sh.Cells(x.Row, 80) ' grade autre
.Add , , sh.Cells(x.Row, 66) + sh.Cells(x.Row, 69) + sh.Cells(x.Row, 72) + sh.Cells(x.Row, 75) + sh.Cells(x.Row, 78) + sh.Cells(x.Row, 81) ' % autre
.Add , , sh.Cells(x.Row, 67) + sh.Cells(x.Row, 70) + sh.Cells(x.Row, 73) + sh.Cells(x.Row, 76) + sh.Cells(x.Row, 79) + sh.Cells(x.Row, 82) ' prix autre

End With

End If
Next
End With

End Sub

merci beaucoup à l'avance
Mélanie

8 réponses

  1. Bonjour,
    Suite au message d'eriiic (Salutations), je pense que si vous corrigez les formules
    Cells(x.Row, 4).Value
    en
    sh.Cells(x.Row, 4).Value   
    cela devrait marcher ... !
    1
    1. Contributeur
      Bonsoir,

      Je ne vous met que le code pour l'instant mais si vous avez besoin du fichier, juste à me le dire!
      A ton avis ?

      eric
      0
      1. Bonjour Eriic

        Voici le lien pour le fichier, mon problème est dans mon usf Livraison sec

        https://www.cjoint.com/?3Gbx2N0shSI

        merci à l'avance
        Mélanie
        0
        1. Contributeur
          merci à l'avance
          Ben de rien.
          Aucune explication sur comment utiliser le fichier, quel bouton cliquer pour se retrouver en situation etc.
          Je n'ai pas à passer 1h pour deviner les explications que tu ne fournis pas, désolé.
          Donc j'arrête là et je laisse la place aux autres.

          eric
          0
        2. Bonjour Éric,

          Désolé, je suis trop ''dedans'' , tu as raison, ce n'étais pas très évident. merci d'avoir regardé.
          Voici donc les instructions. Dans la feuille Bouton, Cliquer sur Livraison Sec
          Ensuite quand le usf s'ouvre, il faut mettre une donnée dans le bon de livraison (un nombre ex:1)
          Ensuite dans le bas le premier Tbox Lot, il faut mettre : Cym-58 (le C doit être en majuscule)
          Puis appuyer sur le bouton au bout le la ligne... Et là normalement les données de la feuille info correspondant au lot Cym-58 et que le mouvement correspond à Entrée ou Ajustement Quantité devrait apparaitre dans ma listview

          Si ce n'est pas claire ou que vous avez besoin de précision, ne vous gêner pas!
          Encore une fois merci d'avance!
          Mélanie
          0
      2. Bonjour,
        Eh bien en suivant vos instructions, ... , il faut mettre une donnée dans le bon de livraison (un nombre ex:1)...
        J'obtiens une erreur de compilation qui se réfère à la procédure :
        Private Sub TBox_Livraison_change()

        Je ne peux donc rien faire de plus.
        0
        1. Bonjour,
          Dans cette condition :
          If x.Value = TBox_Lot1.Value And Cells(x.Row, 4).Value = TextBox54.Value Or Cells(x.Row, 4).Value = TextBox56.Value Then
          La formule
          Cells(x.Row, 4).Value
          fait référence à quelle feuille ... ?
          0
          1. Bonjour Le Pingou,

            Premièrement je voudrais te remercier d'avoir pris le temps de regarder mes trucs, j'apprécie beaucoup.
            la feuille de référence est infos, tout fait référence à cette feuille là.
            Chez-moi je n'ai pas l'erreur que tu me dis que tu as..mon listview ne se rempli pas mais je n'ai pas de message d'erreur

            merci à l'avance
            Mélanie
            0
        2. Contributeur
          Bonjour,

          Le Pingou dit :
          J'obtiens une erreur de compilation qui se réfère à la procédure :
          Private Sub TBox_Livraison_change()

          Idem
          On se retrouve avec, dans les références, un 'windows common controls-3 6.0(SP5)' sortant d'on ne sait où... Référence manquante à décocher.

          fait référence à quelle feuille ... ?
          voir ligne du dessus : For Each x In sh.Range("A6:A" & Cells(Rows.Count, 1).End(xlUp).Row)
          => info!A6:A31

          Je me suis arrété sur la même ligne que le pingou :
          If x.Value = TBox_Lot1.Value And Cells(x.Row, 4).Value = TextBox54.Value Or Cells(x.Row, 4).Value = TextBox56.Value Then

          Déjà je me demande si des () ne seraient pas bien venues (?) :
          if test1 and (test2 or test3) then
          Condition jamais validée pour la bonne raison, je pense, que tu n'indiques pas devoir remplir une de ces textbox.
          Quand tu auras mis un mode opératoire complet peut-être pourras-tu avoir de l'aide plus efficace.

          eric
          0
          1. Bonjour,
            Merci pour l'information.
            Je pense que vous avez aussi pris connaissance de mon deuxième message à la suite de celui d'eriiic (poste 7 / 13 :14) et que de ce fait vous avez corrigé la ligne de code selon ma remarque : poste 8 / 13 :45.
            0
            1. Bonjour Le pingou

              Un énorme MERCI!!! ça fonctionne :)

              p.s merci aussi à Éric qui a pris le temps de regarder

              Mélanie
              0