Comment trouver une ligne selon plusieurs critères
Bonsoir à tous, j'ai actuellement un premier formulaire de saisie sur laquelle les opérateurs entrent la date, l'heure, le nom de l'opérateur, le client, épaisseur, etc... J'ai un deuxième userform qui me permet de rentrer les rebuts. (je ne peux pas combiner les deux userforms car les données ne sont pas rentrées au même moment)
Je souhaiterais que lors de l'affichage de l'userform 2, l'opérateur entre certaines données rentrées dans le premier userform(date, client, etc) pour pouvoir retrouver ma ligne correspondante et ainsi pouvoir rentrer les rebuts sur la ligne correspondante.
Ma question est donc la suivante : comment puis je retrouver la bonne ligne selon plusieurs critères(Date, heure, client) pour pouvoir après insérer les rebuts dans les colonnes suivantes avec le code suivant :
Dim i As Integer
With Range("Tableau3").ListObject
.ListColumns("Rebut").DataBodyRange.Rows(i) = txtrebut
Merci d'avance pour votre aide
Hello,
Sans fichier c'est compliqué d'apporter une réponse précise...
Donc je vais t'apporter une réponse non précise.
Avec une boucle et plusieurs conditions tu peux réaliser ce que tu veux faire
dim i as byte
dim la_ligne as byte
for i = 1 to 50
if range("A" & i) = "01/01/2021" and range("B" & i) = "13:50" and range("C" & i ) = "AIRBUS" then la_ligne =i
next i
msgbox la_ligne Bonsoir, je vais essayé d'être un peu plus précise.
J ai mon premier userform qui remplit une base de donnée comme suit :
Ensuite j'ai un second userform sur lequel l'opérateur remplit la date, l 'heure, le num d'OF rentré préalablement :
Je souhaite que mon programme reconnaisse la ligne correspondante et ajoute dans les colonnes correspondantes le nombre de rebuts, etc
Mon code actuel est le suivant :
Sheets("POUDRAGE").Activate
With Range("Donnees").ListObject
Dim y As Long
y = Worksheets("POUDRAGE").Range("Donnees").Find(txtdate, txtheure, cboref, txtof).Row
.ListColumns("NbNC Brutes").DataBodyRange.Rows(y) = txtnbncbruts
.ListColumns("Gratton").DataBodyRange.Rows(y) = Val(txtgrattons)
.ListColumns("Manque").DataBodyRange.Rows(y) = Val(txtmanque)
.ListColumns("Limites").DataBodyRange.Rows(y) = Val(txtlimite)
.ListColumns("Coulure").DataBodyRange.Rows(y) = Val(txtcoulures)
.ListColumns("Infiltration").DataBodyRange.Rows(y) = Val(txtinfiltration)
.ListColumns("Peau d'orange").DataBodyRange.Rows(y) = Val(txtpeauorange)
.ListColumns("Autres 1").DataBodyRange.Rows(y) = Val(txtautre1)
.ListColumns("Autres 2").DataBodyRange.Rows(y) = Val(txtautre2)
.ListColumns("Commentaire1").DataBodyRange.Rows(y) = txtcommentaire
.ListColumns("Commentaire2").DataBodyRange.Rows(y) = txtcommentaire2
End With
Merci d'avance pour votre aide
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Le plus simple est de créer dans votre tableau structuré, une nouvelle colonne "clé" se déduisant des colonnes Date, Heure et N OF,
par la formule : ==[@Date]&HEURE([@Heure])&[@[N OF]]
Au niveau du code :
With Range("Tableau1").ListObject
Set cell = .ListColumns("clé").Range.Find(CDec(CDate(txtdate)) & Hour(CDate(txtheure)) & txtof)
If Not cell Is Nothing Then
y = cell.Row - Header.RowRange.Row
.ListColumns("NbNC Brutes").DataBodyRange.Rows(y) = txtnbncbruts
.ListColumns("Gratton").DataBodyRange.Rows(y) = Val(txtgrattons)
.ListColumns("Manque").DataBodyRange.Rows(y) = Val(txtmanque)
.ListColumns("Limites").DataBodyRange.Rows(y) = Val(txtlimite)
.ListColumns("Coulure").DataBodyRange.Rows(y) = Val(txtcoulures)
.ListColumns("Infiltration").DataBodyRange.Rows(y) = Val(txtinfiltration)
.ListColumns("Peau d'orange").DataBodyRange.Rows(y) = Val(txtpeauorange)
.ListColumns("Autres 1").DataBodyRange.Rows(y) = Val(txtautre1)
.ListColumns("Autres 2").DataBodyRange.Rows(y) = Val(txtautre2)
.ListColumns("Commentaire1").DataBodyRange.Rows(y) = txtcommentaire
.ListColumns("Commentaire2").DataBodyRange.Rows(y) = txtcommentaire2
End If
End WithBonjour, merci de votre réponse. J'ai essayé d'utiliser votre super idée. Malheureusement cela ne marche pas rien ne s'affiche dans mes colonnes. Je vous joins
en pièce jointe mon fichier (le code correspondant se trouve dans l'userform4) si vous pouviez jeter un coup d'oeil.
Merci d'avance et bonne journée
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Oubli : comme le contenu de la colonne "clé" est une formule, il faut préciser à l'instruction Find , une recherche par valeur.
ci-dessous code :
With Range("Donnees").ListObject
Set cell = .ListColumns("clé").Range.Find(CDec(CDate(txtdate)) & Hour(CDate(txtheure)) & txtof, LookIn:=xlValues)
If Not cell Is Nothing Then
Y = cell.Row - Header.RowRange.Row ' On remplit la ligne
.ListColumns("NbNC Brutes").DataBodyRange.Rows(Y) = txtnbncbruts
.ListColumns("Gratton").DataBodyRange.Rows(Y) = Val(txtgrattons)
.ListColumns("Manque").DataBodyRange.Rows(Y) = Val(txtmanque)
.ListColumns("Limites").DataBodyRange.Rows(Y) = Val(txtlimite)
.ListColumns("Coulure").DataBodyRange.Rows(Y) = Val(txtcoulures)
.ListColumns("Infiltration").DataBodyRange.Rows(Y) = Val(txtinfiltration)
.ListColumns("Peau d'orange").DataBodyRange.Rows(Y) = Val(txtpeauorange)
.ListColumns("Autres 1").DataBodyRange.Rows(Y) = Val(txtautre1)
.ListColumns("Autres 2").DataBodyRange.Rows(Y) = Val(txtautre2)
.ListColumns("Commentaire1").DataBodyRange.Rows(Y) = txtcommentaire
.ListColumns("Commentaire2").DataBodyRange.Rows(Y) = txtcommentaire2
End If
End WithVous êtes génial ca fonctionne merci infiniment !!!!