Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Résolu : ListView avec Checkbox

Angus HEYERDAHL

XLDnaute Junior
Bonjour à tous,

Je viens vers vous car, sur mon fichier j'ai une userform avec une listview (avec checkbox). la listview se charge normalement mais quand je selectionne une ou plusieurs checkbox et que je veux clicker sur le bouton pour faire les modification désirer, il me met argument ou appel de procédure incorrect.
Pourtant sur un autre fichier, j'ai déjà utilisé cette procédure et tout fonctionne correctement.
Je ne trouve pas le problème.
l'erreur se produit sur la ligne
VB:
 t_tab.ListColumns("Sort final").DataBodyRange(Me.List_Archives.ListItems(i)) = "Destruction"

Pourriez-vous m'aider, merci d'avance

ps vous verrez en commentaire le code (qui fonctionne) de l'autre fichier
 

Pièces jointes

  • Fichier test.xlsm
    35.1 KB · Affichages: 4
Dernière édition:

Angus HEYERDAHL

XLDnaute Junior
en fait là dans le fichier que j'ai donné, il n'y avait pas ce cas de figure, mais dans mon fichier original (un fichier d'archivage), j'ai plusieurs boites portant le même nom. j'avais pensé différencier en filtrant avec les dates, mais il peut y arrivé que tout soit identique
 

Angus HEYERDAHL

XLDnaute Junior
dans le fichier exemple, je n'ai mis que 2 colonnes dans la listview, mais il y en aura plus, comment pourrait-on en intégrant par exemple les colonne debut et fin dans la listview mettre "tes" selon non plus 1 condition mais 2 ou 3, afin de maximiser la différenciation des lignes
 

danielco

XLDnaute Accro
Essaie :

VB:
Private Sub CB_Accord_Click()
    Dim i As Integer, Ligne As Long, C As Range
    For i = 1 To Me.List_Archives.ListItems.Count
      If Me.List_Archives.ListItems(i).Checked Then
        With t_tab.ListColumns("Titre boite")
          For Each C In .DataBodyRange
            If C = Me.List_Archives.ListItems(i) Then
              C.Offset(, 10) = "tes"
            End If
          Next C
        End With
      End If
    Next i

    Call LoadListView(Me.List_Archives, "Titre boite/Sort final", t_tab)
End Sub

Daniel
 

Angus HEYERDAHL

XLDnaute Junior
je t'ai remis le fichier avec des modifications, 2 fois la boite 2 et 2 fois la boite 3, dans la listview, j'ai chargé le nom de la boite, debut, fin et sort final.
si on coche 1 seule des boite 2 par exemple, les 2 se cochent (voir plus si 3, 4 ou plus portent le même nom), est-ce qu'on pourrait pas différencier en prenant en compte les colonnes titre boite, debut et fin pour la selection des lignes
 

Pièces jointes

  • Fichier test.xlsm
    40.8 KB · Affichages: 2

Angus HEYERDAHL

XLDnaute Junior
pas forcément selon la date, donc, je dirais qu'il vaut mieux pouvoir choisir boite par boite selon les dates sur la droite, là, dans mon fichier original, j'ai, par exemple 6 boite qui porte le même nom, mais les dates dans les colonnes debut et fin son différentes.
Dans les archives, on doit détruire les boites selon une certaine période, par exemple 10 ans, donc chaque année on produit au moins 1 boite et les noms ne change pas d'année en année, il n'y a que la date qui change. donc si on pouvais faire un choix selon les 3 critères comme le nom, debut et fin, ça permet de pouvoir affiner la selection Boite 2 de 2020 est à détruire mais pas Boite 2 de 2021 par exemple
 

danielco

XLDnaute Accro
Bonjour,

Essaie :

VB:
Private Sub CB_Accord_Click()
    Dim i As Integer, Ligne As Long, C As Range
    For i = 1 To Me.List_Archives.ListItems.Count
      If Me.List_Archives.ListItems(i).Checked Then
        With t_tab.ListColumns("Titre boite")
          For Each C In .DataBodyRange
            If C = Me.List_Archives.ListItems(i) And C.Offset(, 10) <> "tes" And _
             Me.List_Archives.ListItems(i).SubItems(1) = C.Offset(, 1) And _
             Me.List_Archives.ListItems(i).SubItems(2) = C.Offset(, 2) Then
              C.Offset(, 10) = "tes"
            End If
          Next C
        End With
      End If
    Next i

    Call LoadListView(Me.List_Archives, "Titre boite/Debut/Fin/Sort final", t_tab)
End Sub

Daniel
 

Angus HEYERDAHL

XLDnaute Junior
Bonjour Daniel,

Merci pour ta réponse, elle fonctionne parfaitement. c'est super sympa.

Entre-temps je viens de trouvé une autre solution, qui fonctionne avec mon premier code, en ayant une colonne "Identifiant", et en se référant dessus, étant donné que cette colonne ne comporte que des numéros uniques pas besoin de différenciation.
Mais ta solution, peut parfaitement servir si on ne met (ou on oubli) l'identifiant.
et autant avoir plusieurs solutions sous la main.

Un grand merci pour ton temps et ta solution
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…