Msgbox avec tous résultats de recherche si valeur pas trouvé
Résolu/Fermé
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
-
Modifié par bassmart le 27/01/2017 à 18:53
bassmart Messages postés 277 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 30 août 2022 - 3 févr. 2017 à 19:45
bassmart Messages postés 277 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 30 août 2022 - 3 févr. 2017 à 19:45
A voir également:
- Msgbox avec tous résultats de recherche si valeur pas trouvé
- Recherche musique - Guide
- Recherche par image - Guide
- Copiez la ligne indiquant aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
- Trouver un numéro de portable avec un nom ✓ - Forum Mobile
3 réponses
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
Modifié par f894009 le 28/01/2017 à 11:36
Modifié par f894009 le 28/01/2017 à 11:36
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 ?
yg_be
Messages postés
21304
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 mars 2023
1 326
28 janv. 2017 à 12:03
28 janv. 2017 à 12:03
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.
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
1
31 janv. 2017 à 15:18
31 janv. 2017 à 15:18
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!
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
Modifié par michel_m le 29/01/2017 à 14:07
Modifié par michel_m le 29/01/2017 à 14:07
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
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
1
31 janv. 2017 à 14:56
31 janv. 2017 à 14:56
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é!!
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
>
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
31 janv. 2017 à 15:40
31 janv. 2017 à 15:40
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.
Tu n'es surtout pas un pro de la lecture des solutions qu'on te propose
Tu n'es surtout pas un pro de la lecture des solutions qu'on te propose
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
1
>
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
31 janv. 2017 à 15:57
31 janv. 2017 à 15:57
T''as solution fonctionnais très bien Michel.
J'ai seulement essayé de modifier ton code un peu pour qu'il m'affiche seulement une fois le message après avoir traité tout mes fichiers, mais sans succès. J'aurais du mettre ta version originale du code dans ma question!
Sincèrement désolé!!
J'ai seulement essayé de modifier ton code un peu pour qu'il m'affiche seulement une fois le message après avoir traité tout mes fichiers, mais sans succès. J'aurais du mettre ta version originale du code dans ma question!
Sincèrement désolé!!
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
>
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
31 janv. 2017 à 16:34
31 janv. 2017 à 16:34
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....
bassmart
Messages postés
277
Date d'inscription
jeudi 19 février 2015
Statut
Membre
Dernière intervention
30 août 2022
1
>
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
31 janv. 2017 à 17:45
31 janv. 2017 à 17:45
Je ne persiste pas et signe Michel!
Ton code (que tu mentionne) fonctionne très bien, je l'ai essayé!
Mais bon, je ne peut changer ce qui a été fait! Je n'avais surtout pas l'intention de vexer personne ici sur le forum.
Encore désolé!
Ton code (que tu mentionne) fonctionne très bien, je l'ai essayé!
Mais bon, je ne peut changer ce qui a été fait! Je n'avais surtout pas l'intention de vexer personne ici sur le forum.
Encore désolé!
Modifié par bassmart le 31/01/2017 à 15:45
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!!
31 janv. 2017 à 16:18
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!
Modifié par f894009 le 31/01/2017 à 16:40
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
31 janv. 2017 à 16:42
La façon dont j'appel la subroutine, j'utilise
Voici ma macro complète:
Option Explicit Private Sub CommandButton1_Click() Dim QuelFichier() Dim Chemin, Fichier, Nomclasseur, strSONDAGE, Cible, Sondage, Value As String Dim DerLig, Lig, Dercol, Dercol2, NewDercol, DerLigS, DerLigF As Long Dim Prof, Prof2 As String Dim i, x, N, ligne, col, C, V, a As Integer Dim TInfos, nomfichier Dim celluletrouve, celluletrouve2, MaPlage As Range Dim Cn As ADODB.Connection Dim Fichier2 As String Dim NomFeuille As String, texte_SQL As String Dim Rst As ADODB.Recordset ChDrive "m" 'ChDir "M:\Temporaire\Martin D'Anjou\Travail nouveau formulaire\Test piézocône" ChDir "M:\Entrepot\BDFS\1_Données de forages et sondages\" 'On Error GoTo fin QuelFichier = Application.GetOpenFilename("Fichier excel(*.xls; *.xlsx),*.xls;*.xlsx", , , , True) If IsArray(QuelFichier) Then For i = LBound(QuelFichier, 1) To UBound(QuelFichier, 1) Workbooks.Open QuelFichier(i) '------------------------------------------- 'Nom de fichier SANS extention en partant du chemin complet Nomclasseur = Left(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1), Len(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1)) - 4) If Left(Nomclasseur, 1) <> "C" Then If InStr(Nomclasseur, "C") > 6 Then Nomclasseur = Mid(Nomclasseur, InStr((Nomclasseur), "C"), Len(Nomclasseur)) ElseIf Mid(Nomclasseur, 3, 2) = "cp" Or Mid(Nomclasseur, 3, 2) = "CP" Then Nomclasseur = "C" & Left(Nomclasseur, 2) & Mid(Nomclasseur, 5, Len(Nomclasseur) - 4) ElseIf Left(Nomclasseur, 1) = "c" Then Nomclasseur = "C" & Mid(Nomclasseur, 2, Len(Nomclasseur)) Else Nomclasseur = "C" & Nomclasseur End If End If '------------------------------------------- Application.ScreenUpdating = False 'traitement de chacune des feuilles ici '--------------------------------------- For x = 1 To Sheets.Count With Sheets(x) .Unprotect 'Trouver la valeur Depth dans la colonne A sinon on delete '---------------------------------------------------------- Prof = "depth" Set celluletrouve = Range("A1:D10").Find(Prof, lookat:=xlWhole) If celluletrouve Is Nothing Then Prof2 = "Profondeur" Set celluletrouve2 = Range("A1:D10").Find(Prof2, lookat:=xlPart) If celluletrouve2 Is Nothing Then MsgBox "Colonne DEPTH n'as pas été trouvé", vbCritical Cells(1, 1).Value = "PROF" Cells(1, 2).Value = "Qt" Cells(1, 3).Value = "Fs" Cells(1, 4).Value = "U" Else ligne = celluletrouve2.Row col = celluletrouve2.Column Cells(ligne + 1, col).EntireRow.Delete Cells(ligne, col).Value = "PROF" If col > 1 Then Range(Cells(1, 1), Cells(1, col - 1)).EntireColumn.Delete If ligne > 1 Then Range(Cells(1, 1), Cells(ligne - 1, 1)).EntireRow.Delete End If Else ligne = celluletrouve.Row col = celluletrouve.Column Cells(ligne + 1, col).EntireRow.Delete Cells(ligne, col).Value = "PROF" If col > 1 Then Range(Cells(1, 1), Cells(1, col - 1)).Columns.Delete If ligne > 1 Then Range(Cells(1, 1), Cells(ligne - 1, 1)).EntireRow.Delete End If 'On enlève les ligne vides du fichier '------------------------------------ Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' problème ici delete tout 'Ajout de NO_SITE et NO_SONDAGE au bout du tableau + changement de nom '----------------------------------------------------------------------- Dercol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column .Cells(1, Dercol + 1).Value = "NO_SITE" .Cells(1, Dercol + 2).Value = "NO_SONDAGE" Application.CutCopyMode = False Dercol2 = Cells(1, Cells.Columns.Count).End(xlToLeft).Column Range(Cells(1, 1), Cells(1, Dercol2)).NumberFormat = "General" nomfichier = Nomclasseur For N = 2 To Dercol2 Select Case .Cells(1, N).Value Case "Qt", "qt" .Cells(1, N).Value = "QT" Case "Pw", "U", "u" .Cells(1, N).Value = "U2" Case "Fs", "fs" .Cells(1, N).Value = "FS" Case "Temp" .Cells(1, N).Value = "TEMP" Case "NO_SITE" .Cells(2, N).Value = "6.02.06.MT.02." & Mid(Nomclasseur, 2, 2) & "000" .Cells(2, N).EntireColumn.AutoFit Case "NO_SONDAGE" .Cells(2, N).Value = Mid(Nomclasseur, 1, Len(Nomclasseur)) .Cells(1, N).EntireColumn.AutoFit N = Dercol2 'Case "Qc" '.Cells(1, N).Value = "QC" Case Else .Columns(N).Delete '.Cells(1, N).EntireColumn.Delete N = N - 1 End Select Next N .Columns(1).Insert NewDercol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column For C = 3 To DerLig .Range(Cells(C, NewDercol - 1), Cells(C, NewDercol)).Value = .Range(Cells(2, NewDercol - 1), Cells(2, NewDercol)).Value Next C .Columns(NewDercol).Cut Destination:=Columns(1) End With Next x ' Spécifie le chemin du fichier à comparer '------------------------------------------- strSONDAGE = "M:\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx" ' Vérifier que les fichiers A et B se trouvent dans le répertoire '---------------------------------------------------------------- If Dir(strSONDAGE) = "" Then MsgBox "Le fichier SONDAGE.xlsx est introuvables", vbCritical + vbOKOnly, "Problème de fichier..." Exit Sub End If 'Comparaison des deux fichiers '----------------------------- Call compter_dans_fermé 'Copier la valeur cherché sur toute la colonne '--------------------------------------------- DerLig = Range("B" & Rows.Count).End(xlUp).Row Dercol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column Cells(2, 1).Copy With Range(Cells(3, 1), Cells(DerLig, 1)) .PasteSpecial xlPasteValues End With Cells(2, Dercol).Copy With Range(Cells(3, Dercol), Cells(DerLig, Dercol)) .PasteSpecial xlPasteValues End With Chemin = CurDir & "\Transfert_Geotec\" If Dir(Chemin, vbDirectory) = "" Then MkDir "Transfert_Geotec" Fichier = Nomclasseur & "_Geotec" & ".csv" Else Chemin = CurDir & "\Transfert_Geotec\" Fichier = Nomclasseur & "_Geotec" & ".csv" End If With ActiveWorkbook Application.DisplayAlerts = False .SaveAs Filename:=Chemin & Fichier, FileFormat:=xlCSV, CreateBackup:=False, local:=True .Close Application.DisplayAlerts = True End With '------------------------------------------- Next i Else MsgBox "Annuler" End If UserForm1.Hide ThisWorkbook.Saved = True Application.ScreenUpdating = True UserForm2.Show Application.ScreenUpdating = True End Sub31 janv. 2017 à 16:47
Merci pour tous