Faire une boucle de recherche double discriminante / VBA.
Résolu
Knowhere
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Le Pingou Messages postés 12249 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12249 Date d'inscription Statut Contributeur Dernière intervention -
Bien le bonjour !
Je dois créer un fichier de saisit et d'enregistrement. Les fichiers de saisis vont aller s'enregistrer dans le fichier d'enregistrement.
Par contre l'un des fichier de saisis a besoin d'un rappel de ce qui a été précédemment enregistré.
Pour se faire, il faut que je fasse une recherche dans la colonne B de "Sauvegardes Enregistrements_Course Raideurs Décapages", pour trouver le tableau du bon numéro de lancement et de la bonne fraction du lot.
Cela me fait donc deux recherches, qui tournent jusqu'à faire correspondre les deux recherches ensemble.
Là où je coince, c'est que le programme se mort là queue : première recherche Ok, deuxième fausse, donc on recommence... ainsi de suite.
Je ne trouve pas le petit bout de code pour lui dire d'aller plus loin dans ses recherches.
J'espère avoir été compréhensible, et je vous remercie grandement d'avance.
Ci-joint, le code certainement hasardeux.
Je dois créer un fichier de saisit et d'enregistrement. Les fichiers de saisis vont aller s'enregistrer dans le fichier d'enregistrement.
Par contre l'un des fichier de saisis a besoin d'un rappel de ce qui a été précédemment enregistré.
Pour se faire, il faut que je fasse une recherche dans la colonne B de "Sauvegardes Enregistrements_Course Raideurs Décapages", pour trouver le tableau du bon numéro de lancement et de la bonne fraction du lot.
Cela me fait donc deux recherches, qui tournent jusqu'à faire correspondre les deux recherches ensemble.
Là où je coince, c'est que le programme se mort là queue : première recherche Ok, deuxième fausse, donc on recommence... ainsi de suite.
Je ne trouve pas le petit bout de code pour lui dire d'aller plus loin dans ses recherches.
J'espère avoir été compréhensible, et je vous remercie grandement d'avance.
Ci-joint, le code certainement hasardeux.
Private Sub CommandButton2_Click() 'recherche n° lancement: Workbooks.Open Filename:="P:\Technique\METHODES\6.DECAPAGE\Saisies et sauvegardes décap' courses raid\Sauvegardes Enregistrements_Course Raideurs Décapages.xlsm" Dim Trouve As Range, PlageDeRecherche As Range Dim Valeur_Cherchee As String, AdresseTrouvee As String Dim Trouve2 As Range, PlageDeRecherche2 As Range Dim Valeur_Cherchee2 As String, AdresseTrouvee2 As String 'Set Trouve = .FindNext(Trouve) 'Selection.Next(Unit:=wdLine, Count:=1).Select Do Set Trouve.Address = Trouve.Address + 1 Valeur_Cherchee = Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("E3").Value Set PlageDeRecherche = ActiveSheet.Range("B9:B100") Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole) If Trouve Is Nothing Then AdresseTrouvee1 = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address Else AdresseTrouvee1 = Trouve.Address Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("T1") = AdresseTrouvee1 End If 'recherche fraction du lot: Valeur_Cherchee2 = Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("I3").Value Set PlageDeRecherche2 = ActiveSheet.Trouve.Address.Offset(rowOffset:=1, columnOffset:=0) Set Trouve2 = PlageDeRecherche2.Cells.Find(what:=Valeur_Cherchee2, LookAt:=xlWhole) If Trouve2 Is Nothing Then AdresseTrouvee2 = Valeur_Cherchee2 & " n'est pas présent dans " & PlageDeRecherche.Address Else AdresseTrouvee2 = Trouve2.Address Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("T2") = AdresseTrouvee2 End If 'If Trouve <> Trouve2.Offset(rowOffset:=-1, columnOffset:=0).Address Is Nothing Then Loop While Trouve <> Trouve2.Offset(rowOffset:=-1, columnOffset:=0).Address 'End If 'On chope le tableau de contrôle et la valeur moyenne Dim Trouve3 As Range, PlageDeRecherche3 As Range Dim Valeur_Cherchee3 As String, AdresseTrouvee3 As String Valeur_Cherchee3 = "Moyenne" Set PlageDeRecherche3 = ActiveSheet.Range("C10:C100") Set Trouve3 = PlageDeRecherche3.Cells.Find(what:=Valeur_Cherchee3, LookAt:=xlWhole) If Trouve3 Is Nothing Then AdresseTrouvee3 = Valeur_Cherchee3 & " n'est pas présent dans " & PlageDeRecherche.Address Else AdresseTrouvee3 = Trouve3.Address Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("T3") = AdresseTrouvee3 End If 'Condition de vérification et affichage valeur de la moyenne On Error GoTo xxx If Trouve.Address = Trouve2.Offset(rowOffset:=-1, columnOffset:=0).Address Then GoTo Fin xxx: Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Activate MsgBox "Recherche non aboutie", vbOKOnly + vbExclamation, "Attention" Fin: Workbooks("Sauvegardes Enregistrements_Course Raideurs Décapages").Close savechanges:=False Exit Sub Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("D12").Value = Trouve2.Offset(rowOffset:=0, columnOffset:=1).Value Else Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Activate MsgBox "Recherche non aboutie" End If Workbooks("Sauvegardes Enregistrements_Course Raideurs Décapages").Close savechanges:=False End Sub
A voir également:
- Faire une boucle de recherche double discriminante / VBA.
- Double ecran - Guide
- Whatsapp double sim - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Double driver - Télécharger - Pilotes & Matériel
16 réponses
Bonjour,
Avant de poursuivre, avez-vous réalisé un pas à pas sur votre procédure pour voir si la boucle s'incrémente ou pas et aussi le contrôle des valeurs obtenues qui permettent la suite et ou fin de boucle ?
Avant de poursuivre, avez-vous réalisé un pas à pas sur votre procédure pour voir si la boucle s'incrémente ou pas et aussi le contrôle des valeurs obtenues qui permettent la suite et ou fin de boucle ?
Oui, en pas à pas la procédure fonctionne, c'est juste qu'il n'y a aucune fin. ce qu'il manque dans mon cas, c'est le code pour ignorer ce que m'a donné la première boucle de recherche (une sorte de +1 que je n'arrive pas à mettre en place)...
Bonjour ..........!!!!!,
Pouvez-vous rappeler la condition qui doit mettre fin à la recherche dans la boucle... ?
Pouvez-vous rappeler la condition qui doit mettre fin à la recherche dans la boucle... ?
J'ai deux valeurs à retrouver. La recherche des valeurs me donnera l'adresse de la valeur.
Il faut que la première Adresse trouvée ("Trouve"), soit juste au dessus de la seconde Adresse trouvée ("Trouve2")...
Merci d'avance
Il faut que la première Adresse trouvée ("Trouve"), soit juste au dessus de la seconde Adresse trouvée ("Trouve2")...
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Merci pour l'information qui est aussi instructive que votre bonjour.... !
Je vais donc décortiqué la procédure pour comprendre ce qui se passe... ce sera plus long car je dois créer un fichier fictif... !
Merci pour l'information qui est aussi instructive que votre bonjour.... !
Je vais donc décortiqué la procédure pour comprendre ce qui se passe... ce sera plus long car je dois créer un fichier fictif... !
Bonjour,
Merci de m'indiquer dans quel classeur ou se trouve la procédure [Private Sub CommandButton2_Click()] ..... !
En plus il y a une erreur de compilation car votre variable [Trouve] n'as aucune valeur ..... ou les trouver.... ????
Salutations.
Le Pingou
Merci de m'indiquer dans quel classeur ou se trouve la procédure [Private Sub CommandButton2_Click()] ..... !
En plus il y a une erreur de compilation car votre variable [Trouve] n'as aucune valeur ..... ou les trouver.... ????
Salutations.
Le Pingou
Bonjour,
Eh bien voilà, j'ai un sérieux doute sur le contrôle pas à pas que vous avez réalisé chez vous car il y a une erreur de compilation sur le code fourni dans votre message ou alors ce n'est pas le même... !
J'attends votre réponse explicative pour poursuivre...... !
Eh bien voilà, j'ai un sérieux doute sur le contrôle pas à pas que vous avez réalisé chez vous car il y a une erreur de compilation sur le code fourni dans votre message ou alors ce n'est pas le même... !
J'attends votre réponse explicative pour poursuivre...... !
Bonjour !
Désolé du retard mais le week-end je laisse tout cela de côté...
Le Private Sub CommandButton2 se trouve dans le fichier de saisies.
Voici des liens vers mes fichiers excel, ce sera plus explicite.
Il y a deux fichier de saisies pour les opérateurs et un fichier de sauvegarde.
https://www.transfernow.net/fr/8644n7k5o38v
Merci d'avance.
Désolé du retard mais le week-end je laisse tout cela de côté...
Le Private Sub CommandButton2 se trouve dans le fichier de saisies.
Voici des liens vers mes fichiers excel, ce sera plus explicite.
Il y a deux fichier de saisies pour les opérateurs et un fichier de sauvegarde.
https://www.transfernow.net/fr/8644n7k5o38v
Merci d'avance.
Bonjour,
Merci pour le fichier.
Premier constat concernant le pas à pas, j'avais raison car ce n'est pas exactement les mêmes procédures (dans le début...) cela ne pouvait pas fonctionner chez moi.
Je vais donc partir sur celle qui se trouve dans le classeur [Enregistrement_D%C3%A9capages.xlsm)... !
Salutations.
Le Pingou
Merci pour le fichier.
Premier constat concernant le pas à pas, j'avais raison car ce n'est pas exactement les mêmes procédures (dans le début...) cela ne pouvait pas fonctionner chez moi.
Je vais donc partir sur celle qui se trouve dans le classeur [Enregistrement_D%C3%A9capages.xlsm)... !
Salutations.
Le Pingou
Bonjour,
Je reviens encore une fois, je vous avais signalé :
En plus il y a une erreur de compilation car votre variable [Trouve] n'as aucune valeur ..... ou les trouver.... ????
Je tombe sur le même problème avec la commande [CLIQUER POUR VALIDER] ..... ! Ligne en cause [Set Trouve = .FindNext(Trouve)] ...... !
Merci d'expliquer exactement ce que vous voulez réaliser avec cette instruction... !
Je reviens encore une fois, je vous avais signalé :
En plus il y a une erreur de compilation car votre variable [Trouve] n'as aucune valeur ..... ou les trouver.... ????
Je tombe sur le même problème avec la commande [CLIQUER POUR VALIDER] ..... ! Ligne en cause [Set Trouve = .FindNext(Trouve)] ...... !
Merci d'expliquer exactement ce que vous voulez réaliser avec cette instruction... !
Bonjour,
J'ai neutralisé l'instruction .... et cela continu :
Erreur d'exécution `438' ligne surlignée : Set PlageDeRecherche = ActiveSheet.i
Etes-vous sur que ce code fonctionne chez vous.... ?
J'ai neutralisé l'instruction .... et cela continu :
Erreur d'exécution `438' ligne surlignée : Set PlageDeRecherche = ActiveSheet.i
Etes-vous sur que ce code fonctionne chez vous.... ?
Ne vous embêtez plus, j'ai trouvé. Voici le code énormément simplifié, et qui fonctionne. Désolé d'avoir gaché quelque peu votre temps !
Je vous souhaite une bien bonne journée !
Je vous souhaite une bien bonne journée !
Private Sub CommandButton2_Click()
'recherche n° lancement:
Workbooks.Open Filename:="P:\Technique\METHODES\6.DECAPAGE\Saisies et sauvegardes décap' courses raid\Sauvegardes Enregistrements_Course Raideurs Décapages.xlsm"
Do
Dim Trouve1 As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
Valeur_Cherchee = Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("E3").Value
Set PlageDeRecherche = ActiveSheet.Range(ActiveCell.Address & ":B100")
Set Trouve1 = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
If Trouve1 Is Nothing Then
AdresseTrouve1 = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
AdresseTrouve1 = Trouve1.Address
End If
'Recherche fraction de lot
If Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("I3").Text = Trouve1.Offset(1, 0).Text Then
Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("D12").Value = Trouve1.Offset(1, 2).Text
Else
Trouve1.Offset(-1, 0).Select
End If
Loop While Workbooks("Enregistrement_Décapages.xlsm").Sheets("Feuil1").Range("I3").Text <> Trouve1.Offset(1, 0).Text
End Sub
Bonjour,
D'après ce que je trouve dans le code, vous cherchez un couple de valeur (exemple : FLEU et V)
Dans la colonne [B] du classeur de sauvegarde et là vous en avez une quinzaine à des dates et heures différente....... Lequel est le bon couple... ?
Ensuite vous cherchez une [Moyenne] et on la trouve en [C84] et ceci correspond à un N0 de lancement 111 et Fraction de lot 11 ce qui est différent de FLEU et V .......Est-ce vraiment correct....Oui / Non
Enfin vous avez récupéré les adresses [$B£10, $B$11 et $C$84] dans la plage T1 :T3 ..... !
Au passage, le code est bizarre mais bon il faut voir....!
Salutations.
Le Pingou
D'après ce que je trouve dans le code, vous cherchez un couple de valeur (exemple : FLEU et V)
Dans la colonne [B] du classeur de sauvegarde et là vous en avez une quinzaine à des dates et heures différente....... Lequel est le bon couple... ?
Ensuite vous cherchez une [Moyenne] et on la trouve en [C84] et ceci correspond à un N0 de lancement 111 et Fraction de lot 11 ce qui est différent de FLEU et V .......Est-ce vraiment correct....Oui / Non
Enfin vous avez récupéré les adresses [$B£10, $B$11 et $C$84] dans la plage T1 :T3 ..... !
Au passage, le code est bizarre mais bon il faut voir....!
Salutations.
Le Pingou
La sauvegarde de l'EXCEL "sauvegarde" n'était pas représentative de celle qui sera utilisée par la suite... Les tableaux orange et violet seront intercallés un à un, avec des LOT et fractions différentes...
Tel qu'il est, le code fonctionne, j'ai juste à rajouter un IF pour bien vérifier qu'il s'agit du tableau d'enregistrements des courses.
Voilà, un grand merci et bonne soirée !!! ;)
Tel qu'il est, le code fonctionne, j'ai juste à rajouter un IF pour bien vérifier qu'il s'agit du tableau d'enregistrements des courses.
Voilà, un grand merci et bonne soirée !!! ;)