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

Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

plouff

XLDnaute Junior
Bonjour le Forum.
J'espère que vous allez bien.

J'ai besoin de votre lumière pour terminer mon code car je sèche.
J'arrive plus ou moin a bricolé pour faire ce que je souhaite avec VBA mais la je trouve pas de solution.

Dans un tableau je range plusieurs information que je souahite mettre a jour.
EX:
A B C D E
Date d'entré Heure d'entré Référence Date de sorti Heure de sorti
07/04/2016 9:30 1223 ? ?


J'ai crée un userform avec plusieurs TextBox.

Textbox1= La référence a rechercher
Texbox2= Donné a incrémenter en colonne D en fonction de la ligne correspondant au resultat de ma recherche
Texbox3= Donné a incrémenter dans colonne E en fonction de la ligne correspondant au resultat de ma recherche

J'utilise ce code pour chercher ma valeur:
PHP:
Private Sub Quitte_Click()



'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot "Trouve"
Valeur_Cherchee = Textbox1
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(3)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub

Code trouvé sur la toile qui fonctionne bien pour trouvé l'adresse de la référence que je cherche.
Mais je souhaiterai rangé mes textbox2 et 3 plutot que de recevoir un message.

Je n'arrive pas a me faire l'idée du code qui me permettrai de rangé mes textbox dans les cellules que je souhaite en fonction de la ligne trouvé.

Trés cher amis, je suis dans la panade.. lol

Merci pour ce qui pourrons m'aider.

Passer un excellent Vendredi et un bon weekend.
 

Dranreb

XLDnaute Barbatruc
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Bonjour.
Au lieu de noter son adresse dans un String notez plutôt par un Set son EntireRow dans un Range.
Vous pourrez ensuite facilement cibler ses différents .Columns(x).Value

Remarque: Au lieu d'une TextBox, pour la recherche, pourquoi pas plutôt une ComboBox, tant pour la faciliter coté utilisateur que pour l'éviter carrément dans la programmation ?
 
Dernière édition:

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Bonjour Dranred.

Merci pour votre reponse.
En effet je n'avais pas pensé a utilisé un combobox ce qui affichera directement la référence chercher au fur et a mesure qu'elle sera tapé.

Mon idée, qui est loin je vous l'accorde du PRO d'excel mais du novice que je suis, était de chercher la référence dans la colonne pour pouvoir ensuite renseigné les cellules ou il manque les données.
J'imaginé donc trouver la ligne de la cellule que je cherche pour que mon textbox2 et 3 sois directement incrémenté dans les bonne colonne de cette dite ligne.

Maîtrisant très mal les code. Les Deux première ligne de votre réponse son donc pour moi du chinois..lol

qu'est ce que veux dire Set son EntireRow dans un Range et cibler ses différents .Columns(x).Value?

Je connais deja les colonne dans le quel je dois rangé mes Textbox mais je ne connais pas la ligne correspondant a ma recherche.

Je me complique surement la vie..
 

Dranreb

XLDnaute Barbatruc
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

La plage contenant vos cellules sera fixée par: Set PlgLigne = Trouve.EntireRow
Sa cellule Z sera: PlgLigne.Columns("Z")
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

J'essaie d'adapter mon code par rapport a ce que vous dite.
Du coup je l'ai transformé comme ceci:

PHP:
Private Sub Quitte_Click()



'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot "Trouve"
Valeur_Cherchee = NumeroOrdre
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(4)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

PlgLigne = Trouve.EntireRow
PlgLigne.Columns("13") = Evolution.Value

Unload Me
End Sub

Le code PlgLigne.Columns("13") = Evolution.Value appareit en jaune.
J'ai testé sous la forme Sheets("MatierePremiere").PlgLigne.Columns("13") = Evolution.Value mais ca ne fonctionne pas non plus.

J'ai surement mal placé le code.
 

Dranreb

XLDnaute Barbatruc
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Déjà déclarez PlgLigne As Range.
Vous avez oublié le mot clé Set pour l'initialiser.
Pas utile de mettre le numéro de colonne entre double cotes. C'est seulement pour un entête de colonne qu'il les faut.
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

PHP:
Private Sub Quitte_Click()



'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Dim PlgLigne As Range

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot "Trouve"
Valeur_Cherchee = NumeroOrdre
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(4)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

Set PlgLigne = Trouve.EntireRow
Set PlgLigne.Columns("") = Evolution.Value

Unload Me
End Sub

Donc j'ai mis le dim pour declaré PlgLigne As Range en haut mais il me mets toujours en jaune le code PlgLigne = Trouve.EntireRow

Je ne comprend pas pourquoi maintenant qu'il est déclaré.
Si je ne met pas le numéro de colonne dans la quel il doit rangé mon textbox Evolution comment peut il le rangé dans la bonne cellule de la ligne de la reference recherché?
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Merci pour l'idée du combobox ca cartonne.
Pour le reste j'ai beau mettre le code dans tout les sens je n'arrive toujours a rien.
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

alors j'ai fais ça.

dans mon combobox j'ai mis le code

PHP:
Private Sub UserForm_Initialize()
      Me.NumeroOrdre.RowSource = "MatierePremiere!D11:D" & Sheets("MatierePremiere").Cells(1, 1).End(xlDown).Row
End Sub[PHP]

Ce qui fais que j'ai dans mon combobox le code qui arrive directement.:cool:
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Après des heure a chercher ca fonctionne. Enfin presque....lol

Il va bien me placé mon evolution dans la bonne colonne mais sur la ligne du dessus ou la refeence ce trouve.
Je comprend pas pourquoi il me fais cela.
Le code ressemble a ca maintenant.

PHP:
Private Sub UserForm_Initialize()
      Me.NumeroOrdre.RowSource = "MatierePremiere!D11:D" & Sheets("MatierePremiere").Cells(1, 1).End(xlDown).Row
End Sub

Private Sub Quitte_Click()



'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Dim PlgLigne As Range

'********* à adapter ***********
'affectation de valeurs aux variables :
Valeur_Cherchee = NumeroOrdre
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(4)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

Set PlgLigne = Trouve.EntireRow
    PlgLigne.Cells(ligne, 13) = Evolution.Value
 

Unload Me
End Sub

Savez vous pourquoi il me range l'evolution une ligne au dessus de celle ou ce trouve la référence?
 

plouff

XLDnaute Junior
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

C'est bon. j'ai trouvé. il manquais le (2) dans PlgLigne(2).Cells(ligne, 13) = EvolutionCour.Value

Je vois pas bien pourquoi d'ailleur il faut lui dire ce ce decaller de 2 ligne.

En tout cas merci pour votre aide.
J'ai ramé mais c bon ça fonctionne.
un grand merci
 

Dranreb

XLDnaute Barbatruc
Re : Trouver une valeur textbox1 puis ranger un textbox2 dans la cellule de la ligne.

Parce que Ligne vaut 0 et que la ligne 0 d'une plage c'est une ligne au dessus de sa ligne 1

Avec la ComboBox vous n'avez plus besoin de faire de recherche :
VB:
Set PlgLigne = Rows(PlageDeRecherche.Row + NumeroOrdre.ListIndex)
PlgLigne.Columns(13).Value = CDbl(Evolution.Text)
Si vous n'avez qu'une seule cellule à garnir vous pouvez vous contenter de :
VB:
Cells(PlageDeRecherche.Row + NumeroOrdre.ListIndex, 13).Value = CDbl(Evolution.Text)
 

Discussions similaires

Réponses
2
Affichages
321
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…