MsgBox:xlDialogFormularFind [Résolu]

BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention - 8 juin 2016 à 07:02 - Dernière réponse : BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention
- 8 juin 2016 à 18:17
VBA Office (Excel, Word ...) Posez votre question Signaler Répondre au sujet
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
Afficher la suite 

12 réponses

Répondre au sujet
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 8 juin 2016 à 07:12
0
Utile
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.
Commenter la réponse de ucfoutu
BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention - 8 juin 2016 à 07:40
0
Utile
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
Commenter la réponse de BBdebutant
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 8 juin 2016 à 07:51
0
Utile
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 !

Commenter la réponse de ucfoutu
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 8 juin 2016 à 08:00
0
Utile
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" !
Commenter la réponse de ucfoutu
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par ucfoutu le 8/06/2016 à 11:39
0
Utile
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.
Commenter la réponse de ucfoutu
BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention - 8 juin 2016 à 13:44
0
Utile
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
Commenter la réponse de BBdebutant
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 8 juin 2016 à 14:22
0
Utile
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
Commenter la réponse de ucfoutu
cs_MPi 3859 Messages postés mardi 19 mars 2002Date d'inscription 15 décembre 2017 Dernière intervention - 8 juin 2016 à 14:53
0
Utile
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.
Commenter la réponse de cs_MPi
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 8 juin 2016 à 15:28
0
Utile
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.
Commenter la réponse de ucfoutu
BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention - 8 juin 2016 à 17:31
0
Utile
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
Commenter la réponse de BBdebutant
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par ucfoutu le 8/06/2016 à 17:50
0
Utile
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.
Commenter la réponse de ucfoutu
BBdebutant 10 Messages postés mercredi 8 juin 2016Date d'inscription 20 juin 2016 Dernière intervention - 8 juin 2016 à 18:17
0
Utile
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
Commenter la réponse de BBdebutant

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.