MsgBox:xlDialogFormularFind

Résolu
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016 - 8 juin 2016 à 07:02
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016 - 8 juin 2016 à 18:17
Bonjour à tous, je suis un déboutant en VBA, mais j'aimerais
1. effectuer une macro (style CTRL+F) qui recherche dans une colonne(A:Aune valeur xxxx et sectionne la cellule trouvée

2. si aucune valeur n'est trouvée, que la boîte (de recherche) se ferme sans aucune action afin que ma macro puisse continuer de s'exécuter.

Ex. de mon code:
Sheets("Clients").Select
Range("A2").Select
Application.Dialogs(xlDialogFormulaFind).Show 2, , 2

If MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
' TON CODE SI LA REPONSE EST "OUI"
Else
Exit Sub ' TON CODE SI LA REPONSE EST "NON"
End If

Rows(ActiveCell.Row & ":" & ActiveCell.Row).Select
Selection.Copy
Sheets("Calcul").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Clients").Select

Un grand merci par avance de votre aide

12 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2016 à 07:12
Bonjour,
Qu'entends-tu très exactement par :
effectuer une macro (style CTRL+F)

CTRL+F n'est pas une "macro", mais une combinaison de touches pour ouvrir une boîte de dialogue.

Si tu veux gérer toi-même (donc autrement qu'au travers de cette boîte de dialogue), il te faut utiliser la méthode Find, que tu trouveras exposée et assortie d'un exemple très clair à la rubrique Range.Find, méthode de ton aide VBA.
0
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 07:40
Bonjour ucfoutu

par CTRL+F j'entends exécuter la commande: Application.Dialogs(xlDialogFormulaFind).Show 2, , 2
qui me permet d'entrer dans la boîte de dialogue la valeur que je désire trouver
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2016 à 07:51
Il s'agit là d'une boîte de dialogue Excel.
Sa vocation est claire : faciliter à l'utilisateur l'exécution de tâches prédéfinies et limitées à la recherche et au remplacement.

Ce type de boîte de dialogue ne permet rien d'autre et en tout état de cause pas d'inclure dans le cours de son exécution des instructions de traitement autres que celles gérées intrinsèquement par cette boîte.

J'insiste donc : pour faire ce que tu sembles vouloir faire, il te faudra utiliser la méthode Range.Find dont je t'ai parlé dans mon message précédent.
A toi d'y inclure, si nécessaire, la détermination de ses paramètres via des inputboxes.
A toi également d'y inclure, via une msgbox, la décision de sortir (un exit Do) éventuellement de la boucle parfaitement exposée dans l'exemple dont est assortie la rubrique Range.Find, entre Do et Loop !

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2016 à 08:00
Si maintenant ta question, après cette lecture, est :
Comment arrêter une boule de type Do ... Loop par msgbox, la réponse est : comme dans ce petit exemple :
Private Sub CommandButton1_Click()
Static titi As Integer
Do
titi = titi + 1
If MsgBox("titi = " & titi & vbCrLf & "voulez-vous continuer ?", vbYesNo) = vbNo Then
titi = 0
Exit Do
End If
Loop While titi < 1000
End Sub

Quelles que soient les instructions entre "Do" et "Loop" !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 8/06/2016 à 11:39
Et intéresse-toi dans la foulée à ce que te permet de savoir WorksheetFunction.countif
(même pas la peine de lancer une recherche et des instructions si elle retourne 0)

EDIT : j'aimerais maintenant vraiment que tu nous montres ce que tu as au moins tenté d'écrire après toutes ces indications. Ce serait bien et montrerait que tu "en veux" vraiment.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 13:44
Merci de ton aide pour commencer, et oui c'est en cherchant, essayant que l'on apprend. Grace à toi, j'ai pu trouver une solution qui fonctionne: voilà ce que j'ai écrit et insérer dans ma macro

Sheets("Resto").Select
Range("A2").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
nomCherche = InputBox("Nom cherché? ")
Set result = Range("A2:A1500").Find(What:=nomCherche, LookIn:=xlValues)
If result Is Nothing Then
MsgBox "Non trouvé"
Range("A1500").Select
Else
Range(result, result).Select
End If
If MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
Else
Exit Sub
End If
Rows(ActiveCell.Row & ":" & ActiveCell.Row).Select
Selection.Copy
Sheets("Calcul1").Select
Range("A1").Select
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2016 à 14:22
Je ne vois rien, dans ce code, qui montre :
- ni ce que tu fais si occurrence trouvée
- ni à quoi sert ta msgbox si l'utilisateur répond oui
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 juin 2016 à 14:53
Bonjour, n'oublie pas le LookAt de la fonction Find
Set result = Range("A2:A1500").Find(What:=nomCherche, LookIn:=xlValues, LookAt:=xlPart)  

Tu mets xlPart si tu veux que le texte recherché soit contenu en partie dans la cellule ou xlWhole si tu veux la cellule contienne exactement le texte recherché.

Find est l'équivalent de la boîte de dialogues dont tu parlais et mémorise les choix de recherche d'une fois à l'autre.

Si tu fais une recherche manuelle (Ctrl-F) et que tu coches certaines options, quand tu vas utiliser Find, celle-ci va les reconnaître par défaut.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2016 à 15:28
Bonjour, Cs_MPI,
Oui, mais le demandeur veut en plus faire une injection ailleurs, à chaque occurrence trouvée. La boîte de dialogue ne le permettant pas, il va lui falloir passer par la méthode Find et intervenir à chaque occurrence.
0
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 17:31
Re bonjour et encore merci. Voici la macro complète qui fonctionne. On peut certainement même surement l'améliorer, mais je ne suis qu'un débutant.
Sub Facture_totale()
'
' Facture_chambre_boisson Macro
'
Sheets("Clients").Select
Range("A2").Select
Application.Dialogs(xlDialogFormulaFind).Show 2, , 2
If MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
Else
Exit Sub
End If
Rows(ActiveCell.Row & ":" & ActiveCell.Row).Select
Selection.Copy
Sheets("Calcul").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Clients").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Sheets("Resto").Select
Range("A2").Select
Cells(Rows.Count, 1).End(xlUp)(2).Select
nomCherche = InputBox("Nom cherché? ")
Set result = Range("A2:A1500").Find(What:=nomCherche, LookIn:=xlValues)
If result Is Nothing Then
MsgBox "Non trouvé"
Range("A1500").Select
Else
Range(result, result).Select
End If
If MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
Else
Exit Sub
End If
Rows(ActiveCell.Row & ":" & ActiveCell.Row).Select
Selection.Copy
Sheets("Calcul1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Resto").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Sheets("resto").Select
Range("A2").Select

'Prix chambre
Sheets("Calcul").Select
Range("A1").Select
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("B1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("C1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("K1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("M1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("J1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul").Select
Range("N1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Prix resto
Sheets("Calcul1").Select
Range("D1").Select
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("J1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("M1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("P1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B16").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("S1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B17").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("V1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B18").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("Y1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B19").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("AB1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("AE1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B21").Select
Sheets("Calcul1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Calcul1").Select
Range("AH1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Saisir compta

Sheets("Facture chambre et resto").Select
Range("B4").Select
Selection.Copy
Sheets("Compta").Select
Range("F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Facture chambre et resto").Select
Range("B10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Compta").Select
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Facture chambre et resto").Select
ActiveWindow.SmallScroll Down:=1
Range("B23").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Compta").Select
Range("H2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Facture chambre et resto").Select
ActiveWindow.SmallScroll Down:=1
Range("D1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Compta").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F2:I2").Select
Selection.Cut
Sheets("Compta").Select
Dim ligne As Long
ligne = Range("A1").End(xlDown).Row + 1
Cells(ligne, 1).Activate
ActiveSheet.Paste
Range("E2").Copy
Range("E1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Columns("E:E").Select
Selection.NumberFormat = "m/d/yyyy"
Sheets("Facture chambre et resto").Select
Range("A1").Select


End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 8/06/2016 à 17:50
Que te répondre, sinon qu tu ferais mieux de tout revoir.
- aucune raison d'utiliser à la fois la boîte de dialogue et la méthode Find (la seconde suffit et est nécessaire)
- cesse de travailler à coups de select, etc ... et commence à travailler directement sur les objets de Excel.
Exemple (un bout de ton code ... ce n'est qu'un bout car on retrouve cela un peu partout dans ton code) :
Sheets("Calcul").Select
Range("B1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Facture chambre et resto").Select
Range("B5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

n'est jamais rien d'autre que ceci :
worksheets("Calcul").range("B1").copy destination:= worksheets("Facture chambre et resto").range("B5")

!!!
Tu en as un peu partout du même "goût".

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
BBdebutant Messages postés 10 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 18:17
Merci de ta réponse. Et oui c'est là que l'on voit la différence entre un débutant comme moi et un pro comme toi.
Salutations
0
Rejoignez-nous