Boucle pour équivalent d'une recherchev à deux critères

Fermé
Stess - 30 avril 2014 à 17:56
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 6 mai 2014 à 15:46
Bonjour à tous,

Ne maîtrisant pas l'utilisation des boucles, je solicite votre aide car je n'ai pas trouvé de post résolu se rapprochant de ma problématique.

Voici la structure simplifiée de mon fichier :

Colonne A = Client
Colonne B = Produit
Colonne C = Date de commande
Colonne D = Date de la précédente commande (même Client, même Produit)
Disons que ma plage de Cellules est $A$1:$D$3000 (il existe d'ailleurs peut-être une formule pour ajuster automatiquement la plage de cellule à la dernière ligne remplie ?)

Mon besoin : renseigner la colonne D par une boucle qui va chercher pour une ligne donnée, la date de la commande précédente la plus récente pour le même client et le même produit.

Je vous remercie par avance pour votre aide précieuse.

Bien à vous

Stess
A voir également:

2 réponses

skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 2/05/2014 à 16:59
Bonjour voilà qqchose qui pourrai marcher :

Il faut le mettre dans le code de la feuille concernée

et il faut que la 4 ème collonne ai un format date

Il peut y avoir un titre

Il ne doit pas y avoir de ligne vide dans la liste ! si non elle sera considéré comme la dernière ligne


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 3 Then Exit Sub
If Target.Column = 3 Then 'S'execute s'il y a un changement dans la collonne "C"
Dim CTRL_A As String 'V : CTRL de la valeur de la colonne A
Dim CTRL_B As String 'V : CTRL de la valeur de la colonne B
Dim CL_A As String 'V : Nom du client à chercher
Dim PR_B As String 'V : Nom du produit à chercher
Dim Ligne As Integer 'V : Ligne en cours
Ligne = 2 'La ligne 2 est définie car la ligne 1 contient surement des titres
Dim Ligne_end As Integer 'V : N° de la dèrnière ligne
Dim Date_end As Long 'Valeur de la date en format nombre

CTRL_A = Cells(Ligne, 1).Value 'Initialisation de la valeur de CTRL avant la boucle
Do 'Cherche la valeur de la dèrnière ligne
Ligne = Ligne + 1
CTRL_A = Cells(Ligne, 1).Value
Loop While CTRL_A <> ""

Ligne_end = Ligne - 1 'sauvegarde la dernière ligne
Ligne = 2 ' Réinitialise la valeur de la ligne
CL_A = Cells(Ligne_end, 1).Value 'sauvegarde le client
PR_B = Cells(Ligne_end, 2).Value 'sauvegarde le produit

CTRL_A = Cells(Ligne, 1).Value 'Initialisation des valeur pour la boucle
CTRL_B = Cells(Ligne, 2).Value
Do While Ligne <> Ligne_end
If CTRL_A = CL_A Then
If CTRL_B = PR_B Then
Date_end = Cells(Ligne, 3).Value 'Sauvegarde de la valeur date
End If
End If
Ligne = Ligne + 1
CTRL_A = Cells(Ligne, 1).Value
CTRL_B = Cells(Ligne, 2).Value

Loop
Cells(Ligne_end, 4) = Date_end

End If
End Sub

Bonne journée :) // N'oubliez pas de mettre RESOLU !

*Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utils"
0
Bonjour skk201,

Merci beaucoup d'avoir pris le temps de vous pencher sur ma demande, c'est vraiment agréable de pouvoir compter sur les membres du forum et de se sentir aidée!
En adaptant le code à la réalité de mon fichier, j'ai quelques questions et erreurs à lever. Excusez moi par avance, pour le niveau des questions, je débute en vba...

1. Quand on inscrit le code directement dans une feuille en tant que Private Sub, il s'éxecute directement ? ici à chaque changement sur la feuille ?

2. Ma date de commande dans mon fichier complet est en colonne 21, je dois bien remplacer 3 par 21 dans le code ci-dessous ?
If Target.Count > 3 Then Exit Sub
If Target.Column = 3 Then

Par avance, merci pour votre accompagnement!
Bonne journée à vous

Stess
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
6 mai 2014 à 15:46
Oui Le code s'execute si il y a un changement dans la collonne 3 (La nouvele date de la commande)
D'ou le :
If Target.column = then

Dans l'idée c'était que les infos soient renplies les unes après les autres. et que donc la colonne 3 soit la dernière. Une fois que la dernière info a été transcrite, elle allait chercher l'info a ajouter dans la collonne 4.

Le numér afficher indique quand il faut aller chercher la date de l'enregistrement en question. à vous d'adapter en fonction de votre document.

Si vous avez des questions n'hésitez pas :)
0