VBA: contrôler un boucle avec un bouton (click)

Lptht

XLDnaute Nouveau
Bonsoir le forum,

Je sèche sur un problème. J'ai à ma disposition une liste de "Personnes à valider" (ID, nom, prénom, âge, validé: oui/non) visible dans l'onglet "Données". Sur la 1ère feuille, j'aimerais réaliser une macro qui permet de valider ou refuser (au bon vouloir de l'utilisateur), les personnes de la liste "Personnes à valider".
Pour se faire, l'userform1 permet de voir les informations de la personnes puis de cliquer sur valider ou refuser. Il y a alors deux cas:
- Si on valide la personne, alors on affiche celle si dans le tableau de la 1ère feuille "Personnes validées" et on écrit la mention "Oui" dans la colonne validée de l'onglet "donnees"
- Sinon, on refuse et on laisse tel quel.

Je ne sais vraiment pas comment faire une boucle (pour lire tout le tableau "Personnes à valider") qui s'exécute grâce à notre action sur les boutons Valider et Refuser.

J'espère avoir été compréhensible. Je joins mon fichier "Validation.xlsm".

Merci beaucoup à ceux qui prendront le temps de jeter un coup d’œil à mon problème.

Bonne soirée
 

Pièces jointes

  • Validation.xlsm
    20.8 KB · Affichages: 46
  • Validation.xlsm
    20.8 KB · Affichages: 55
  • Validation.xlsm
    20.8 KB · Affichages: 64

job75

XLDnaute Barbatruc
Re : VBA: contrôler un boucle avec un bouton (click)

Bonsoir Lptht,

Je verrais plutôt un UserForm comme dans le fichier joint avec ce code :

Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim t, i&
t = [Tableau1]
For i = 1 To UBound(t)
  t(i, 5) = IIf(ListBox1.Selected(i - 1), "OUI", "")
Next
[Tableau1] = t
UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim t, i&
ListBox1.RowSource = "Tableau1"
t = [Tableau1]
For i = 1 To UBound(t)
  ListBox1.Selected(i - 1) = t(i, 5) = "OUI"
Next
End Sub
La ListBox est alimentée via sa propriété RowSource, ce qui permet d'avoir des en-têtes de colonnes.

Pour la validation les "NON" m'ont paru inutiles et même gênants.

A+
 

Pièces jointes

  • Validation(1).xlsm
    23.9 KB · Affichages: 42

job75

XLDnaute Barbatruc
Re : VBA: contrôler un boucle avec un bouton (click)

Re,

Bah, je n'avais pas vu qu'il y avait des formules (en colonne D) mais ce n'est pas du tout un problème :

Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim t, i&
t = [Tableau1].Formula
For i = 1 To UBound(t)
  t(i, 5) = IIf(ListBox1.Selected(i - 1), "OUI", "")
Next
[Tableau1] = t
UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim t, i&
ListBox1.RowSource = "Tableau1"
t = [Tableau1]
For i = 1 To UBound(t)
  ListBox1.Selected(i - 1) = t(i, 5) = "OUI"
Next
End Sub
Fichier (2).

Bonne nuit et A+
 

Pièces jointes

  • Validation(2).xlsm
    24.8 KB · Affichages: 34

job75

XLDnaute Barbatruc
Re : VBA: contrôler un boucle avec un bouton (click)

Re,

Bon, on peut ne charger que la colonne (5), redimensionnée pour être sûr d'avoir au moins 2 cellules :

Code:
Private Sub CommandButton1_Click() 'bouton Valider
Dim t, i&
t = [Tableau1].Columns(5).Resize(, 2) 'au moins 2 cellules
For i = 1 To UBound(t)
  t(i, 1) = IIf(ListBox1.Selected(i - 1), "OUI", "")
Next
[Tableau1].Columns(5) = t
UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim t, i&
ListBox1.RowSource = "Tableau1"
t = [Tableau1].Columns(5).Resize(, 2) 'au moins 2 cellules
For i = 1 To UBound(t)
  ListBox1.Selected(i - 1) = t(i, 1) = "OUI"
Next
End Sub
C'est un peu plus rapide.

Fichier (3).

Re bonne nuit.
 

Pièces jointes

  • Validation(3).xlsm
    25.2 KB · Affichages: 39

Lptht

XLDnaute Nouveau
Re : VBA: contrôler un boucle avec un bouton (click)

Merci Job75,

Votre proposition est légèrement différente de ce que je voulais mais c'est une autre manière de voir les choses qui est aussi une solution!

Je vais regarder le code de plus près. Et je reviendrai ici en cas de questions.

Merci encore,

A bientôt et bonne journée
 

job75

XLDnaute Barbatruc
Re : VBA: contrôler un boucle avec un bouton (click)

Bonjour Lptht,

Votre proposition est légèrement différente de ce que je voulais (...)

Légèrement ???

Avec votre UserFom initial :

- il faut nécessairement faire des recherches via une ou plusieurs ComboBox

- il ne sera pas facile de distinguer les homonymes

- la validation sera très fastidieuse s'il y a beaucoup de personnes à valider.

A+
 

job75

XLDnaute Barbatruc
Re : VBA: contrôler un boucle avec un bouton (click)

Re,

Dans l'USF de ce fichier (4) j'ai ajouté une ComboBox.

Elle permet de rechercher un nom et d'afficher ce nom en 1ère position dans la ListBox.

Cela grâce à la propriété TopIndex :

Code:
Private Sub ComboBox1_Change()
ListBox1.TopIndex = ComboBox1.ListIndex
End Sub

Private Sub CommandButton1_Click() 'bouton Valider
Dim t, i&
t = [Tableau1].Columns(5).Resize(, 2) 'au moins 2 cellules
For i = 1 To UBound(t)
  t(i, 1) = IIf(ListBox1.Selected(i - 1), "OUI", "")
Next
[Tableau1].Columns(5) = t
UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim t, d As Object, i&
With [Tableau1]
  '---initialisation de la ComboBox---
  If ComboBox1.ListCount = 0 Then
    .Sort .Columns(2), xlAscending, Header:=xlYes 'tri
    ComboBox1.List = .Columns(2).Value
  End If
  '---initialisation de la ListBox---
  t = .Columns(5).Resize(, 2) 'au moins 2 cellules
  ListBox1.RowSource = .Address
  For i = 1 To UBound(t)
    ListBox1.Selected(i - 1) = t(i, 1) = "OUI"
  Next
End With
End Sub
A+
 

Pièces jointes

  • Validation(4).xlsm
    24.6 KB · Affichages: 47
Dernière édition:

Lptht

XLDnaute Nouveau
Re : VBA: contrôler un boucle avec un bouton (click)

Merci Job75,

Votre proposition est vraiment très intéressante.

Vous m'avez apporté une autre manière de résoudre le problème, qui est en plus très efficace.

Merci beaucoup pour avoir pris le temps de réfléchir et de me répondre.

Bonne soirée.
 

Discussions similaires

Réponses
12
Affichages
328

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87