Boite de dialogue pr sélectionner une cellule

Résolu
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009 - 3 mars 2008 à 23:45
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009 - 6 mars 2008 à 00:47
Bonjour,

J'ai inséré le code suivant dans un de mes fichiers Exel. Le code est censé donner la référence de la cellule ou se trouve la variable string "text". Tout marche très bien jusqu'au cas ou le text recherché n'existe pas dans la plage. A partir de ce point j'aimerai créer qqch du style "On error" lancer une boite de dialogue pour aller chercher manuelement la cellule comme la boite qui apprait lors de la création de graphiques mais je ne sais vraiment pas comment faire...

Merci de votre aide!

Sub Search2()


Dim Cellule As String
Dim text As String


text = Cells(4, 15).Value


Cellule = Range("A1:J20").Find(What:=text, MatchCase:=True).Address


Cells(1, 15).Value = Cellule


SetSourceData


End Sub

9 réponses

Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009
4 mars 2008 à 00:04
En fait j'aurais aussi un deuxième problème avec ce code. Celui-ci me retroune l'adresse de la cellule ou se trouve le text; par exemple $B$21. Sauf que la cellule qui m'intéresse c'est la $B$22, comment écrire $B$21 + 1?

Merci d'avance
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 mars 2008 à 11:24
Dim Cellule As Range
Dim text As String


text = Cells(4, 15).Value




Set
Cellule = Range("A1:J20").Find(What:=text, MatchCase:=True)


If Not Recherche Is Nothing Then


    Msgbox Cellule.Address


Else


    Msgbox "Valeur non trouvée"


End if



MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009
4 mars 2008 à 22:41
Merci pour la réponse mais ça ne résout pas vraiment mon problème. L'adresse de la cellule doit etre utilisée plus loin dans le code donc si l'adresse était ok ce serait tout bon mais en fait, il me faut l'adresse de la cellule se trouvant une ligne plus bas de l'adresse de la cellule recherchée initiallement donc du style AB7 + 1 mais ca marche pas!!!

Et pr la boite de dialogue, pas que ca m'indique que ca marche pas mais sur Excel je crois qu'il y a un truc pr faire apparaitre une  box de ce style!?
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 495.75pt; HEIGHT: 189pt" type="#_x0000_t75"><v:imagedata cropright="23889f" cropleft="14367f" cropbottom="38352f" croptop="10483f" o:title="" src="file:///C:\DOCUME~1\MARTINA\LOCALS~1\Temp\msohtml1\05\clip_image001.png"></v:imagedata></v:shape>
Pour aller chercher une cellule comme dans le cas d'un graph...

MERCI!!!
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 mars 2008 à 22:56
Set
Cellule = Range("A1:J20").Find(What:=text, MatchCase:=True)
te renvoie la cellule ou la valeur de la variable text a été trouvée.
Si tu veux l'adresse de la cellule en-dessous, tu n'as qu'à utiliser Offset

AutreCellule = Cellule.Address.Offset(1,0)

Pour ta boîte de dialogue, je pense que tu devras créer un UserForm et l'afficher en Modeless pour pouvoir sélectionner une cellule sur la feuille pendant que l'Userform est affiché.

Théoriquement (j'ai pas essayé...) il te faudra utiliser une variable booléenne qui définit si le Userform est affiché ou non. Donc, dès l'affichage du UserForm tu mets cette variable à True et tu la remets à False lorsqu'il se ferme. Dans le code Selection_Change de la feuille, si la variable est True, tu affectes la valeur de Target au Textbox qui devrait contenir cette valeur (ou adresse selon...)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3

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

Posez votre question
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009
4 mars 2008 à 23:09
Merci pr l'astuce, mais ca me fait apparitre l'erreur 424 "Objet requis" et j'ai essyé de regarder l'aide excel mais je trouve pas le problème!

Merci
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 mars 2008 à 23:16
Ça ne me dit pas grand chose comme ça...
As-tu le bout de code que tu essaies et qui génère cette erreur ?
Et sur quelle ligne l'erreur apparaît ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009
4 mars 2008 à 23:28
Private Sub CommandButton2_Click()


Dim k As Integer
Dim BStrikeD As Double
Dim BFeesD As Double
Dim BPriceD As Double
Dim BPositionD As Double


If BTicker <> "" Then
If BStrike <> "" Then
If Btype <> "" Then
If BMaturity1 <> "" Then
If BMaturity2 <> "" Then
If BMaturity3 <> "" Then
If BUnderlying <> "" Then
If BSector <> "" Then
If BRegion <> "" Then
If BPosition <> "" Then
If BPrice <> "" Then
If BFees <> "" Then


BStrikeD = BStrike.value
BFeesD = BFees.value
BPriceD = BPrice.value
BPositionD = BPosition.value


last = Worksheets("Positions").Cells(4, 2).End(xlDown).Row


k = 0
For i = 6 To last
    If Worksheets("Positions").Cells(i, 2).value = BTicker Then
        k = k + 1
    End If
Next i


If k = 0 Then
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = BTicker
    Sheets("Positions").Activate
       
    With Worksheets("" & BTicker & "").QueryTables.Add(Connection:= _
        "URL;http://www.swissquote.ch/fcgi-bin/stockfquote?symbols=" & BTicker & "&language=f", _
        Destination:=Worksheets("" & BTicker & "").Cells(1, 1))
        .Name = Ticker
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertEntireRows
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "13"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With


If Worksheets("" & BTicker & "").Cells(1, 1).value "" And Worksheets("" & BTicker & "").Cells(1, 2).value "" And Worksheets("" & BTicker & "").Cells(1, 3).value = "" Then
    MsgBox ("Sorry, but this Ticker does not exist.")
    Application.DisplayAlerts = False
    Worksheets("" & BTicker & "").Delete
    Application.DisplayAlerts = True
    Exit Sub
End If
End If




Worksheets("Positions").Cells(last + 1, 2).value = BTicker
Worksheets("Positions").Cells(last + 1, 3).value = BStrikeD
Worksheets("Positions").Cells(last + 1, 4).value = Btype
Worksheets("Positions").Cells(last + 1, 5).value = BMaturity1 & "." & BMaturity2 & "." & BMaturity3
Worksheets("Positions").Cells(last + 1, 7).value = BUnderlying
Worksheets("Positions").Cells(last + 1, 8).value = BSector
Worksheets("Positions").Cells(last + 1, 9).value = BRegion
Worksheets("Positions").Cells(last + 1, 10).Formula = "=IF(D" & last + 1 & "=""Call"",""Down Side"",""Up Side"")"
Worksheets("Positions").Cells(last + 1, 11).Formula = "=if(E" & last + 1 & "-B2<0,""Closed"",E" & last + 1 & "-$B$2)"
Worksheets("Positions").Cells(last + 1, 12).Formula = "=IF(K" & last + 1 & "=""Closed"",""Closed"",IF(K" & last + 1 & "<=10,""<10 Days"",IF(K" & last + 1 & "<20,""10 Days"",IF(K" & last + 1 & "<30,""20 Days"",IF(K" & last + 1 & "<60,""1 Month"",IF(K" & last + 1 & "<90,""2 Months"",IF(K" & last + 1 & "<180,""3 Months"",IF(K" & last + 1 & "<360,""6 Months"",""1 Year""))))))))"
Worksheets("Positions").Cells(last + 1, 14).value = BPositionD
Worksheets("Positions").Cells(last + 1, 15).value = BPriceD
Worksheets("Positions").Cells(last + 1, 16).Formula = "=N" & last + 1 & "*O" & last + 1 & ""
Worksheets("Positions").Cells(last + 1, 17).value = BFeesD
Worksheets("Positions").Cells(last + 1, 18).Formula = "=P" & last + 1 & "+Q" & last + 1 & ""
Worksheets("Positions").Cells(last + 1, 38).Formula = "=N" & last + 1 & "-T" & last + 1 & "-Z" & last + 1 & "-AF" & last + 1 & ""




Set BuyingArea = Worksheets("" & BTicker & "").Range("A1:J20").Find(What:="Achat*", MatchCase:=True)



BuyingPriceArea = BuyingArea.Address.Offset(rowOffset:=1, columnOffset:=0)

Sur celle en orange... Merci
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 mars 2008 à 23:48
Ta variable BuyingArea doit être déclarée As Range

Si BTicker est de type String, il ne sert à rien d'y ajouter des guillemets
Worksheets("" & BTicker & "")
pourrait devenir
Worksheets(BTicker)

Dim BuyingArea As Range
Set BuyingArea = Worksheets(BTicker).Range("A1:J20").Find(What:="Achat*", MatchCase:=True)

If Not BuyingArea Is Nothing Then
    'blabla - le code si la valeur a été trouvée
Else
    'si la valeur n'est pas trouvée, on affiche un UserForm préalablement créé
    Userform1.Show vbModeless  'pour pouvoir sélectionner une cellule
End if

vbModeless n'est pas disponible pour les versions antérieures à 2000, il me semble

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
Amartin6 Messages postés 44 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 21 septembre 2009
6 mars 2008 à 00:47
Mercxi pour tt, tt est parfait!
3
Rejoignez-nous