Msgbox avec tous résultats de recherche si valeur pas trouvé
Résolu
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
Bonjour le forum,
J'ai une macro avec à l'intérieure une requète SQL pour rechercher une valeur dans un fichier non ouvert (merci à Michel sur ce coup) qui fonctionne très bien. Lorsque la valeur recherché n'est pas trouvé, j'ai ajouté un "msgbox" pour avertir l'utilisateur que la valeur n'a pas été trouvé.
Le problème est que si je traite plusieurs fichiers en même temps, il l'affiche après le traitement de chacun des fichiers. Ce que je voudrais, c'est qu'il l'affiche seulement une fois à la fin du traitement de tout les fichiers. Encore mieux, je sortirais un genre de rapport ou de journal(style Word) avec tout les fichiers où que la valeur n'a pas été trouvé.
J'ai essayé à différent endroit dans mon code, mais sans succès.
Voici mon code qui se trouve dans un module:
Pouvez-vous m'aider?
J'ai une macro avec à l'intérieure une requète SQL pour rechercher une valeur dans un fichier non ouvert (merci à Michel sur ce coup) qui fonctionne très bien. Lorsque la valeur recherché n'est pas trouvé, j'ai ajouté un "msgbox" pour avertir l'utilisateur que la valeur n'a pas été trouvé.
Le problème est que si je traite plusieurs fichiers en même temps, il l'affiche après le traitement de chacun des fichiers. Ce que je voudrais, c'est qu'il l'affiche seulement une fois à la fin du traitement de tout les fichiers. Encore mieux, je sortirais un genre de rapport ou de journal(style Word) avec tout les fichiers où que la valeur n'a pas été trouvé.
J'ai essayé à différent endroit dans mon code, mais sans succès.
Voici mon code qui se trouve dans un module:
Option Explicit '------------------------------------------------------------ Sub compter_dans_fermé() Dim Source As Object, Requete As Object Dim Prefix As String, Fichier2 As String, Table As String, texte_SQL As String Dim i As Integer Dim Msg As String 'initialisation Msg = "" '----------------------------------Initialisations Prefix = ActiveSheet.Cells(2, "A") If Prefix = "" Then MsgBox "cellule vide", vbCritical, vbOKOnly Exit Sub End If 'Définit le classeur fermé servant de base de données Fichier2 = "M:\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx" 'Nom de la feuille dans le classeur fermé Table = "SONDAGE" & "$" ' colonne de recherche 'Champ = "NO_SONDAGE" '-----------------------------------connexion Set Source = CreateObject("ADODB.connection") With Source .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & Fichier2 & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With '--------------------------requete Set Requete = CreateObject("ADODB.Recordset") texte_SQL = "SELECT NO_SONDAGE FROM [" & Table & "]" Set Requete = Source.Execute(texte_SQL) '-------------------------restitution With Requete .MoveFirst Do While Not .EOF If .Fields(0) Like Prefix & "*" Then ActiveSheet.Cells(2, "A") = .Fields(0) i = 1 Exit Do End If .MoveNext Loop If i = 0 Then Msg = Msg & "La valeur " & ActiveSheet.Cells(2, "A") & " n'as pas été trouvé dans la table «SONDAGE»" & Chr(10) End If End With 'Affichage du msgbox If Msg <> "" Then MsgBox Msg, vbExclamation, "Attention!!!" End If End Sub
Pouvez-vous m'aider?
A voir également:
- Msgbox avec tous résultats de recherche si valeur pas trouvé
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Resultats foot - Télécharger - Vie quotidienne
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Ou se trouve la corbeille de whatsapp - Guide
- Recherche photo - Guide
3 réponses
Bonjour,
Justement, j'ai suivi les episodes a propos de la demande que vous aviez faites et que vous avez a la fin quand meme utilise le code de Michel_M.
J'avais d'ailleur fait un code sur votre fichier avec votre programmation de depart et en fin je fais un
C12003-004-08
C12003-004-09
et dans ce cas !!
C12096-004-12
C12096A-004-12
Plusieurs fichiers, ok, mais comment les recherchez-vous ?
Justement, j'ai suivi les episodes a propos de la demande que vous aviez faites et que vous avez a la fin quand meme utilise le code de Michel_M.
J'avais d'ailleur fait un code sur votre fichier avec votre programmation de depart et en fin je fais un
.CopyFromRecordsetau lieu d'une boucle pour trouver le ou les bons numeros, petite question: etes-vous sure qu'il n'y a qu'un seul sondage correspondant au numero mis au depart dans la cellule, car dans votre fichier exemple y a au un cas ou il y en a deux
C12003-004-08
C12003-004-09
et dans ce cas !!
C12096-004-12
C12096A-004-12
Plusieurs fichiers, ok, mais comment les recherchez-vous ?
bonjour, tu veux-dire que tu appelles plusieurs fois compter_dans_fermé(), et que tu veux afficher le message après le dernier appel?
comment se font les multiples appels à compter_dans_fermé()?
si tu veux créer un rapport, il suffit d'écrire Msg dans un fichier au lier de faire le MsgBox.
comment se font les multiples appels à compter_dans_fermé()?
si tu veux créer un rapport, il suffit d'écrire Msg dans un fichier au lier de faire le MsgBox.
Bonjour yg_be,
Oui, je peut appeler plusieurs fois compter_dans_fermé(), dans le cas ou je veux traiter plus d'un classeur à la fois.
Cette macro est placé dans un module qui fait partie d'une macro beaucoup plus grosse qui ouvre les classeurs sélectionnés, qui effectue la mise en page de chacun des classeurs et qui les sauvegardent sous un nouveau nom.
Si je sélectionne exemple 5 classeurs, il fait le traitement des 5 classeurs un à la fois en boucle.
Est-ce que tu veux dire que je dois changer la ligne
Merci!
Oui, je peut appeler plusieurs fois compter_dans_fermé(), dans le cas ou je veux traiter plus d'un classeur à la fois.
Cette macro est placé dans un module qui fait partie d'une macro beaucoup plus grosse qui ouvre les classeurs sélectionnés, qui effectue la mise en page de chacun des classeurs et qui les sauvegardent sous un nouveau nom.
Si je sélectionne exemple 5 classeurs, il fait le traitement des 5 classeurs un à la fois en boucle.
Est-ce que tu veux dire que je dois changer la ligne
MsgBox Msg, vbExclamation, "Attention!!!"?
Merci!
Lorsque la valeur recherché n'est pas trouvé, j'ai ajouté un "msgbox" pour avertir l'utilisateur que la valeur n'a pas été trouvé.
JE TE SIGNALE QUE JE T'AI PROPOSE CE POINT DANS MES REPONSES :-(((
TON i=1 EST RIDICULE --
J'ai une macro avec à l'intérieure une requète SQL pour rechercher une valeur dans un fichier non ouvert (merci à Michel sur ce coup)
JE REGRETTE DE T'AVOIR AIDE
Michel
JE TE SIGNALE QUE JE T'AI PROPOSE CE POINT DANS MES REPONSES :-(((
TON i=1 EST RIDICULE --
J'ai une macro avec à l'intérieure une requète SQL pour rechercher une valeur dans un fichier non ouvert (merci à Michel sur ce coup)
JE REGRETTE DE T'AVOIR AIDE
Michel
Bonjour Michel,
Désolé te t'avoir offusqué, ce n'était pas le but! Ça fonctionnait très bien lorsque j'ouvre un seul fichier.
Mais lorsque j'ouvre exemple 5 fichiers en même temps (je les traitent un à la fois),si il ne trouve pas aucune des valeurs recherché il m'envoi 5 messages à la fin de chacun des fichiers.
Pour le i=1, tu as raison que c'est ridicule! J'assume que je ne suis pas un pro de la programmation VBA, je fais de mon mieux pour arriver au résultats voulu.
Encore désolé de t'avoir froissé!!
Désolé te t'avoir offusqué, ce n'était pas le but! Ça fonctionnait très bien lorsque j'ouvre un seul fichier.
Mais lorsque j'ouvre exemple 5 fichiers en même temps (je les traitent un à la fois),si il ne trouve pas aucune des valeurs recherché il m'envoi 5 messages à la fin de chacun des fichiers.
Pour le i=1, tu as raison que c'est ridicule! J'assume que je ne suis pas un pro de la programmation VBA, je fais de mon mieux pour arriver au résultats voulu.
Encore désolé de t'avoir froissé!!
Tu persistes et signes
ci dessous copie du post 19 que tu n'as pas dédaigné lire...
.....
peite modif à apporter pour signaler un échec
I ly a d'ailleurs beaucoup simple mais....
ci dessous copie du post 19 que tu n'as pas dédaigné lire...
.....
peite modif à apporter pour signaler un échec
With Requete
.MoveFirst
Do While Not .EOF
test = .fields(0)
If .fields(0) Like Prefix & "*" Then
ActiveSheet.Cells(2, "A") = .fields(0)
Exit Sub
End If
.MoveNext
Loop
End With
'gestionnnaire erreur
MsgBox "Référénce cherchée: " & Cells(2, "A") & " introuvable.", vbCritical, vbOKOnly
End Sub
I ly a d'ailleurs beaucoup simple mais....
Bon point, je n'y avais même pas pensé!!
J'ai fait le test et effectivement dans les 2 cas j'ai un problème! Si j'ai C28209A dans ma cellule de recherche, il me copie la valeur C28209-005-12 et non pas C28209A-005-12.
La façon que je recherche dans le classeur fermé, c'est avec la valeur qui est inscrite dans la cellule (A2) de mon fichier qui correspond à C28209A.
Comment faire pour corriger le problème? Est-ce qu'il y a un moyen de nous avertir qu'il a trouvé 2 valeurs correspondantes et de choisir laquelle on veut utiliser?
Est-ce que le serait une meilleur option?
Merci beaucoup!!
Je résolu le problème pour les numéro comme C28209A, il y avais une petite erreur dans la retranscription du nom du classeur qui correspond à NO_SONDAGE à l'intérieur du classeur, il me tronquait le nom en enlevant le "A" de la fin.
Maintenant, ça fonctionne bien pour c'est cas!
un fichier avec les deux methodes de recherche et affichage, ne résout pas le probleme des msgbox, mais ceci est assez simple a resoudre
Dans "mon code" j'utilse une requete SQL avec un WHERE et LIKE
Nous reposons la meme question:
-Comment selectionnez-vous les fichiers a traiter et avec comment appelez-vous votre subroutine
La façon dont j'appel la subroutine, j'utilise
Voici ma macro complète:
Merci pour tous