Signaler

Rechercher des valeurs identiques dans un colonne

Posez votre question freeycap 73Messages postés lundi 27 octobre 2014Date d'inscription 1 décembre 2016 Dernière intervention - Dernière réponse le 1 déc. 2016 à 21:57
Bonjour,

J'ai une feuille (Data1) sur laquelle sont listées les différents groupes de formation qui rentrent dans la boite ou je travaille :
- Sur ma colonne A, j'ai le numéro de mes groupes de formation (1, 2, 3, ...),
- Sur ma colonne B, le nom de mes groupes de formation (Groupe1, Groupe2, Groupe3, ...),
- Sur colonnes C à K d'autres infos moins importantes ici,
- Et sur ma colonne L, le statut du groupe de formation qui a 2 valeurs possibles : 'Complété' ou alors 'En Cours' (fini ou pas fini quoi ...)

La plupart du temps, il n'y a qu'un groupe de formation qui a le statut 'En Cours'.
Mais quelques fois, il m'arrive d'avoir 2 groupes en même temps (et ca va se faire de + en + en 2017... ca embauche à tours de bras...).. donc 2 statuts 'En Cours'...
Et il n'y en aura jamais plus que 2... (heureusement, soit dit en passant...)

J'ai aussi mon Userform2 qui me permet justement de créer dans mon dossier mes nouveaux groupes de formation.

Actuellement, lorsque j'ouvre mon Userform2, je vois les détails (le numéro, le nom et le statut) du dernier groupe... toujours avec le statut 'En Cours'. Je récupère ces détails sur ma feuille Data1 avec le code suivant :

'Valeur de la derniere cohorte en cours textbox2
'Nom de la derniere cohorte en cours textbox1
'Satut de la derniere cohorte en cours textbox3
With Worksheets("Data1")
TextBox1.Value = Range("A1").End(xlDown).Value
TextBox2.Value = Range("B1").End(xlDown).Value
TextBox3.Value = Range("L1").End(xlDown).Value
End With

Ca, ca marche super bien pour 1 seul groupe de formation 'En Cours'... parce que bien sur, c'est le dernier de ma liste... Donc je sélectionne par défaut la dernière ligne... ok ca c'est bon.. mais ce n'est pas optimalement ce que j'aimerai faire.

Ce que je veux faire : Rechercher, dans ma colonne L, du haut vers le bas, la ou les valeurs 'En Cours' : donc s'il y a un seul résultat trouvé, remplir mes Textbox1 2 & 3 (qui seront visible par défaut)... mais si après il y a un second résultat 'En Cours', rendre alors visible les textbox 5 6 & 7 (textbox.visible = true, originalement non visible) avec les infos correspondantes sur les colonnes A, B et L (le numéro, le nom et le statut) du second groupe de formation 'En Cours'.

Merci d'avance pour votre aide.

Y.
Afficher la suite 
Utile
+0
moins plus
Bonjour,

code a mettre dans VBA Userform2

Private Sub UserForm_Activate()
    With Worksheets("Data1")
        EnCours = "En Cours"
        Nb = Application.CountIf(.Columns(12), EnCours)
        If Nb = 0 Then
        ElseIf Nb <= 2 Then
            lig = 1: Of7 = 0
            For N = 1 To Nb
                lig = .Columns(12).Find(EnCours, .Cells(lig, 12), , xlWhole).Row
                Me.Controls("TextBox" & N + Of7).Visible = True
                Me.Controls("TextBox" & N + Of7) = .Range("A" & lig)
                Of7 = Of7 + 1
                Me.Controls("TextBox" & N + Of7).Visible = True
                Me.Controls("TextBox" & N + Of7) = .Range("B" & lig)
                Of7 = Of7 + 1
                Me.Controls("TextBox" & N + Of7).Visible = True
                Me.Controls("TextBox" & N + Of7) = .Range("L" & lig)
                Of7 = Of7 + 1
            Next N
        End If
    End With

End Sub
Ajouter un commentaire
Utile
+0
moins plus
Bonjour,

Merci beaucoup, ça marche numéro 1... c'est parfait.

Par contre j'aurai quelques questions histoire de bien comprendre le code :
- Comment je dois comprendre cette partie là du code :
ElseIf Nb <= 2 Then -> ca c'est ok !!
lig = 1: Of7 = 0
For N = 1 To Nb
surtout ca : lig = 1: Of7 = 0
En fait, j'pige pas bien le Of7...

- Me.Controls : ca fait quoi ca exactement ?

Aussi, dans le cas ou j'ai 2 résultats qui apparaissent 'en Cours', pour le deuxieme resultat, je veux rendre visible un combobox2 qui me demandera si ce groupe de formation (donc le deuxième résultat de recherche en Cours) est complété ou pas. J'ai déjà un Combobox1 dans le cas ou j'ai une réponse 'En Cours'.

Merci d'avance,

Y.
f894009 10685Messages postés dimanche 25 novembre 2007Date d'inscription 7 décembre 2016 Dernière intervention - 29 nov. 2016 à 16:36
Re,
- Me.Controls : ca fait quoi ca exactement ?
 Me.Controls("TextBox" & N + Of7)

Ce code permet d'indexer un control ex ici,:
TextBox1 a 3 et avec N + l'offset quand N=1
TextBox5 a 7 et avec N + l'offset quand N=2

code pour Combobox et petie modif du IF N puisque vous n'avez pas besoin du =0

Private Sub UserForm_Activate()
    With Worksheets("Data1")
        EnCours = "En Cours"
        Nb = Application.CountIf(.Columns(12), EnCours)     'nombre de fois EnCours
        If Nb > 0 And Nb <= 2 Then
            lig = 1: Of7 = 0        'ligne de depart et offset pour 123 et 567
            For N = 1 To Nb
                lig = .Columns(12).Find(EnCours, .Cells(lig, 12), , xlWhole).Row        'recherche ligne de EnCours
                Me.Controls("TextBox" & N + Of7).Visible = True                         '
                Me.Controls("TextBox" & N + Of7) = .Range("A" & lig)
                Of7 = Of7 + 1
                Me.Controls("TextBox" & N + Of7).Visible = True
                Me.Controls("TextBox" & N + Of7) = .Range("B" & lig)
                Of7 = Of7 + 1
                Me.Controls("TextBox" & N + Of7).Visible = True
                Me.Controls("TextBox" & N + Of7) = .Range("L" & lig)
                Of7 = Of7 + 1
                Me.Controls("Combobox" & N).Visible = True
            Next N
        End If
    End With

End Sub
Répondre
Ajouter un commentaire
Utile
+0
moins plus
holala... Of7... offset.... oulala...
c'était hier lundi matin... sorry....
Merci pour les explications et pour le combobox.

Mais là, forcément, je m'aperçois que mon affaire n'est pas comme il faut... ça marche, mais c'est pas ça...

En fait, mes Combobox doivent permettre de changer le statut de mes groupes de formation de 'En Cours' à 'Complété'.
Si je choisis 'Oui', mon groupe est encore 'En cours', donc le statut ne change pas sur ma feuille Data1.
Si je choisis 'Non', ça change mon statut de 'En Cours à 'Complété' sur ma feuille Data1.

Aussi, que ce soit 'Oui' ou 'Non', dans le cas ou j'ai un seul groupe 'En Cours' ca me rend visible un Textbox dans lequel je rentre le nom de mon nouveau groupe...

Et en confirmant le TextBox, ça incrémente le numéro du groupe de formation sur mon userform (c'est à dire le Textbox du numéro du groupe de formation fait +1), le TextBox du nom du groupe change pour le nouveau nom, et le TextBox du statut revient à 'En Cours'.
Et ces 3 infos se rajoutent avec une nouvelle ligne dans ma feuille Data1.

Mais là, j'ai la possibilité d'avoir 2 groupes 'en Cours'... donc avec 2 Combobox Oui / Non...

Y aurait'il la possibilité d'avoir un seul Combobox, qui me pose la question : Le 1er Groupe 'En Cours' est-il toujours 'En Cours' : Oui / Non (et change le statut sur la feuille Data1 si nécessaire)
Et une fois répondu, que le Combobox me pose la même question, mais pour le second Groupe qui est toujours 'En Cours' + change le statut si nécessaire sur la feuille Data1 + msg d'erreur si je choisis une deuxième fois 'Oui' parce que je ne peux avoir que 2 formations 'En Cours en même temps + Ouvre mon Textbox pour entrer le nouveau groupe.

Et à la confirmation de mon TextBox, refait la boucle pour rechercher les groupes 'En Cours'... Et le numéro du nouveau groupe étant l'incrément de 1 du dernier des 2 numéros...

Ca fait beaucoup là, non ?
Ajouter un commentaire
Utile
+0
moins plus
Pour aider, j'ai ça comme code sur mon CommandButton :

Private Sub CommandButton1_Click()

If TextBox4.Value = "" Then
MsgBox "Entrer le Nom de la nouvelle Cohorte."
Exit Sub

ElseIf ComboBox1.Value = "Non" Then

With Worksheets("Data1")
Range("L1").End(xlDown).Value = "Complétée"
End With

Me.TextBox1.Value = Me.TextBox1.Value + 1

'Pour copier le nom de la cohorte dans la page Data1
With Worksheets("Data1")
Nlig = .Range("B" & Rows.Count).End(xlUp).Row + 1
.Range("A" & Nlig).Value = TextBox1
.Range("B" & Nlig).Value = TextBox4
.Range("L" & Nlig).Value = "En Cours"
End With

Me.TextBox2.Value = Me.TextBox4.Value
Label5.Visible = False
ComboBox1.Visible = False
Label6.Visible = False
TextBox4.Visible = False
CommandButton1.Visible = False
CommandButton2.Visible = True


ElseIf ComboBox1.Value = "Oui" Then

Me.TextBox5.Value = Me.TextBox1.Value + 1

With Worksheets("Data1")
Nlig = .Range("L" & Rows.Count).End(xlUp).Row + 1
.Range("L" & Nlig).Value = "En Cours"
.Range("B" & Nlig).Value = TextBox4
.Range("A" & Nlig).Value = TextBox5
TextBox7.Value = Range("L1").End(xlDown).Value
End With

Me.TextBox6.Value = Me.TextBox4.Value
Label5.Visible = False
ComboBox1.Visible = False
Label6.Visible = False
TextBox4.Visible = False
CommandButton1.Visible = False
CommandButton2.Visible = True
Label7.Visible = True
TextBox5.Visible = True
TextBox6.Visible = True
Label8.Visible = True
TextBox7.Visible = True

End If

End Sub
Ajouter un commentaire
Utile
+0
moins plus
Vraiment plus ?
Ajouter un commentaire
Utile
+0
moins plus
Bonjour

Transféré dans forum Prog-VBA
Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
et faire un clic droit-coller le raccourci dans votre message

Dans l’attente



Ajouter un commentaire
Utile
+0
moins plus
Salut Michel,

Voici le lien :
http://www.cjoint.com/c/FKEo6WElJ5G
Je pense que c'est toi qui m'a déjà aidé précédement.
En fait c'est toujours le même dossier, mais avec plus de questions encore..

Merci pour ton aide

Y.
Ajouter un commentaire
Utile
+0
moins plus
vraiment personne ????
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !