Dja75

XLDnaute Nouveau
Bonjour tout le monde,

Je débarque sur le forum afin de solliciter votre aide. Je ne suis pas une grande spécialiste en VBA mais bon j’essaie…

J’ai un fichier avec 2 formulaires : sortie et retour. Pour le formulaire de sortie, j’ai une liste déroulante pour le numéro et 2 textbox utilisateur et une date de sortie. Les informations ajoutées dans ces textbox sont insérées dans cellules spécifiques dans la feuille « BASE ». Sur cette même feuille, il y a des colonnes « date de retour » et » masse » qui restent vide jusqu’au retour du , dès lors ces cellules seront remplies par le formulaire retour…

Et c’est là que ça coince un peu, j’aimerai faire une recherche dans la feuille « BASE » , voici la méthodologie que j’essaie de mettre sous code VBA.

  • Choix d’un numéro dans liste déroulante
  • Dans la colonne B, recherche du numéro choisi, dès que le numéro correspond, on sélectionne la ligne.
  • Sur cette ligne :
    • si la case date de retour est vide alors valeur cellule = textbox1 et valeur cellule juxtaposée = textbox2
    • si la case n’est pas vide, on analyse les autres lignes
Dans le cas ou mon explication n'est pas assez claire, voici une capture d’écran de la feuille que je souhaite remplir au fur et à mesure.

Le numéro 1 apparait plusieurs fois, mais sur la ligne 5, la case Date de retour est vide, je cherche à remplir cette cellule et celle d'à coté.

Merci pour votre aide, vos pistes de recherches de solutions.

capture pour code
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Dja75 (Bienvenue sur le forum)

Préambule
Les jolies images ont vocation:
1) à rester dans les albums cartonnés de Tante Henriette
2) punaisées sur les murs de chambres d'ados masqués (hélas pour eux)

Je dis cela parce qu'Excel, les photos ca lui sert pas vraiment ;)
Mais un fichier Excel avec le code VBA et l'userform déjà en dedans de lui, ca oui ce sera utile pour t'aider.
;)
 

Dja75

XLDnaute Nouveau
Bonjour,

Merci pour vos remarques :)
Voici le fichier dont est issue la capture d'écran, j'ai fais quelques tentatives (désastreuses..) de code mais rien de concluant..

Pour le formulaire de retour, si on sélectionne le numéro 1 , celui-ci apparait plusieurs fois dans la colonne B, si on analyse chaque ligne ou apparait ce numéro, la case date de retour sera vide sur une ligne uniquement, c'est cette cellule que je cherche à remplir et celle juxtaposée.

Merci par avance pour votre aide, pistes, .. ! :)
 

Pièces jointes

  • test code base forum.xlsm
    43.7 KB · Affichages: 8
  • test code base forum.xlsm
    43.7 KB · Affichages: 4

Staple1600

XLDnaute Barbatruc
Bonsoir


Une possibilité de code pour le bouton OK sur l'Userform1
VB:
Private Sub CommandButton1_Click()
With UserForm1
Worksheets("BASE").Cells(Rows.Count, 1).End(3)(2).Resize(, 3) = Array(.Utilisateur, .Numero * 1, .Datedesortie)
End With
MsgBox "Les données ont été ajoutées", vbOKOnly + vbInformation, "Information"
Unload UserForm1
End Sub
NB: A mettre à la place de l'existant.
 
Dernière édition:

Dja75

XLDnaute Nouveau
Bonsoir


Une possibilité de code pour le bouton OK sur l'Userform1
VB:
Private Sub CommandButton1_Click()
With UserForm1
Worksheets("BASE").Cells(Rows.Count, 1).End(3)(2).Resize(, 3) = Array(.Utilisateur, .Numero, .Datedesortie)
End With
MsgBox "Les données ont été ajoutées", vbOKOnly + vbInformation, "Information"
Unload UserForm1
End Sub
NB: A mettre à la place de l'existant.
Merci je teste ca
 

Staple1600

XLDnaute Barbatruc
Re

Et pour le second Userform
VB:
Private Sub CommandButton1_Click()
Dim Ligne&
With Worksheets("BASE")
.Range(.Cells(2, "B"), .Cells(Rows.Count, 2).End(3)).Name = "ListNUM"
End With
Ligne = Application.Match(CLng(Numero.Value), [ListNUM], 0) + 1
MsgBox Cells(Ligne, "B").Address
End Sub

Private Sub UserForm_Initialize()
Dim vArr
With Worksheets("BASE")
vArr = .Range(.Cells(2, "B"), .Cells(Rows.Count, 2).End(3)).Value
End With
Numero.List = vArr
End Sub
NB: Il faut effacer le contenu de la propriété Rowsource pour les 2 combox.

PS: Pour le moment, il s'agit juste de code VBA de test.
(rien d'autre ;))
 
Dernière édition:

Dja75

XLDnaute Nouveau
Bonjour,

J'ai d'abord supprimé les valeurs dans les rowsource.

En effet, le code pour l'userform1 est plus pertinent que celui que j'avais écrit.

J'ai testé le code pour l'userform2, après avoir récupéré l'adresse de la cellule (grâce à votre code), je stocke cette adresse dans une textbox. Cela me permet ensuite de remplir les cases date de retour, et masse de cette même ligne, donc un GRAND MERCI c'est comme je voulais !

Le seul petit souci, c'est ce que vu que l'on affiche dans la liste déroulante l'ensemble des valeurs de la colonne B, y a t il une méthode pour éviter les "doublons" ?

Merci pour votre aide !

Bonne journée :)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Il n'y aucun souci puisque j'avais précisé
PS: Pour le moment, il s'agit juste de code VBA de test.
(rien d'autre ;))
Ce qui veut dire juste du code illustratif pour mettre le pied à l'étrier.

Maintenant pour la suite, il faudrait savoir comment est utilisé ton classeur.
Logiquement, il ne devrait pas y a avoir de doublons si la saisie se fait correctement.
Reste à implémenter la chose ;)
 

Staple1600

XLDnaute Barbatruc
Re

Toujours à titre d'exemple
(Ici le numéro s'incrémente automatiquement)
NB: Prérequis:
sur la feuille BASE, mettre au minimum 3 lignes de
données (avec B2=1 et B3=2)
VB:
Private Sub CommandButton1_Click()
With UserForm1
Worksheets("BASE").Cells(Rows.Count, 1).End(3)(2).Resize(, 3) = Array(.Utilisateur, .Numero * 1, .Datedesortie)
End With
MsgBox "Les données ont été ajoutées", vbOKOnly + vbInformation, "Information"
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim vArr, f As Worksheet: Set f = Worksheets("BASE")
vArr = f.Range(f.[B2], f.Cells(Rows.Count, 2).End(3)).Value
    With Numero
        .List = vArr: .AddItem (.ListCount + 1): .Text = .List(.ListCount - 1)
    End With
End Sub
 

Dja75

XLDnaute Nouveau
Re

Toujours à titre d'exemple
(Ici le numéro s'incrémente automatiquement)
NB: Prérequis:
sur la feuille BASE, mettre au minimum 3 lignes de
données (avec B2=1 et B3=2)
VB:
Private Sub CommandButton1_Click()
With UserForm1
Worksheets("BASE").Cells(Rows.Count, 1).End(3)(2).Resize(, 3) = Array(.Utilisateur, .Numero * 1, .Datedesortie)
End With
MsgBox "Les données ont été ajoutées", vbOKOnly + vbInformation, "Information"
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim vArr, f As Worksheet: Set f = Worksheets("BASE")
vArr = f.Range(f.[B2], f.Cells(Rows.Count, 2).End(3)).Value
    With Numero
        .List = vArr: .AddItem (.ListCount + 1): .Text = .List(.ListCount - 1)
    End With
End Sub

Bonjour,

J'ai testé et cela fonctionne très bien sur le fichier test et le fichier final !

Merci cela m'a permis d'en apprendre plus sur la méthodologie VBA.

Bonne journée
 

Discussions similaires

Réponses
12
Affichages
483

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof