OVH Cloud OVH Cloud

Find depuis activecell

6 réponses
Avatar
Denys
Bonjour,

Ce coup-ci, je ne trouve pas. Cela fait suite =E0 ma question pos=E9e
pr=E9c=E9demment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel s=E9lecte la cellule correspondante.

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. L=E0,
je voudrais qu'Excel commence la recherche dans la colonne B =E0 partir
de la cellule active suite =E0 la recherche du combobox1 en descendant.

C'est l=E0 que je bloque car je dois associer une plage ou une cellule =E0
la fonction Find et activecell ne fonctionne pas...

Quelqu'un saurait?

Merci

Denys

6 réponses

Avatar
LSteph
Bonjour bonsoir ,
:(
on vous l'a dit et répèté pas de select dans les macros !!!

sauf quand c'est indispensable
et c'est très très très rare.


;-)

Donne le texte de ta macro et surtout plutôt des détails sur ce que tu
souhaites faire parcequ'ici on connait plein de comment.. mais
ce qui nous manque souvent dans la question c'est les faire...quoi!
Et si c'est trop dur , et bien un autre te répondra.

Ma suggestion:

précédemment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel sélecte la cellule correspondante.


Plutôt qu'un select il convient de connaître probablement le numéro de
la ligne correspondant donc une variable as long ou un appel direct..

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. Là,
je voudrais qu'Excel commence la recherche dans la colonne B à partir
de la cellule active suite à la recherche du combobox1 en descendant.


Ok mais tu ne dis ni pour chercher quoi ni dans quel but!?

C'est là que je bloque car je dois associer une plage ou une cellule à
la fonction Find et activecell ne fonctionne pas...


Activecell représente la cellule active et cette définition fonctionne
fort bien pour ce qu'elle veut dire.

Quelqu'un saurait
saurait...?


Cordialement.

lSteph







Bonjour,

Ce coup-ci, je ne trouve pas. Cela fait suite à ma question posée
précédemment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel sélecte la cellule correspondante.

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. Là,
je voudrais qu'Excel commence la recherche dans la colonne B à partir
de la cellule active suite à la recherche du combobox1 en descendant.

C'est là que je bloque car je dois associer une plage ou une cellule à
la fonction Find et activecell ne fonctionne pas...

Quelqu'un saurait?

Merci

Denys



Avatar
Denys
Bonsoir,

:(
on vous l'a dit et répèté pas de select dans les macros !!!

sauf quand c'est indispensable
et c'est très très très rare.


Désolé, c'est la première fois que j'entends parler de ne pas
sélectionner un objet dans une macro..... Mais puisque tu le dis...

Je vais essayer donc d'être plus explicite. Dans la colonne A se
trouve des abbréviations de cies. ces abbréviations ont trois lettres.
Dans la colonne B, il y a les numéros des produits (trois chiffres).
Puis en colonne C, le nom du produit.

Donc la compagnie DEF se trouve en colonne A peut-être 35 fois si elle
a 35 produits. Avec mon userform, le combobox1 l'usager écrit DEF.
Immédiatement dans le combobox2 apparait le premier numéro à trois
chiffres à côté du premier DEF de la colonne A.

Lorsque j'écris le nombre dans le combobox correspondant dans la
colonne B au produit de la cie DEF, je voudrais qu'Excel commence la
recherche à partir de la ligne correspondant au premier DEF de la
colonne A. La raison est qu'il y a peut-être 20 cies dont le no de
produit est 123. Jusqu'à présent, Excel part toujours du début de la
colonne B au lieu de la ligne correspondante à la recherche
précédente....

J'espère que c'est plus explicite ainsi... Voici le code...

Private Sub ComboBox1_Change()
Call Trouver
End Sub

Sub Trouver()
'On Error Resume Next
Application.ScreenUpdating = False
Sheet1.Select
Nom = ComboBox1
If ComboBox1 = "" Then Exit Sub
Dim c, fistA
Dim msg, Style, Title, response
Style = vbInformation + vbYesNo
Title = ""
With ActiveSheet().Range("Abbrev") ' Colonne A

Set c = .Find(What:=Nom, after:=Range("A2"), LookIn:=xlValues,
Lookat:=xlWhole, searchdirection:=xlNext, MatchCase:=True)

If c Is Nothing Then
question1 = MsgBox("No such abbreviation found !!", vbOKOnly)
ComboBox2.Value = ""
Exit Sub
End If

If Not c Is Nothing Then
fistA = c.Address
Application.GoTo Reference:=Range(c.Address)
ComboBox2.Value = ActiveCell.Offset(0, 1).Value
ComboBox3.Value = ActiveCell.Offset(0, 2).Value
ActiveCell.Offset(0, 1).Select
Sheet3.Select
End If
End With
Sheet3.Select
End Sub

Ensuite je recommence avec le combobox2, mais je veux que la recherche
commence à la cellule active.

Merci

Denys

Avatar
MichDenis
Si je suppose que la cellule active ne se retrouve jamais
sur la ligne 1 de la feuille de calcul, car le Offset(-1)
serait alors impossible et génèrerait une erreur

Attention, la méthode find a plusieurs parametres, assure toi
que tu utilises tous ceux qui sont obligatoires pour ta recherche ...

With Feuil3
With .Columns(ActiveCell.Column)
X = .Find(what:="toto", After:¬tiveCell.Offset(-1), SearchOrder:=xlByColumns).Row
End With
End With




"Denys" a écrit dans le message de news:

Bonjour,

Ce coup-ci, je ne trouve pas. Cela fait suite à ma question posée
précédemment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel sélecte la cellule correspondante.

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. Là,
je voudrais qu'Excel commence la recherche dans la colonne B à partir
de la cellule active suite à la recherche du combobox1 en descendant.

C'est là que je bloque car je dois associer une plage ou une cellule à
la fonction Find et activecell ne fonctionne pas...

Quelqu'un saurait?

Merci

Denys
Avatar
LSteph
'...
With Combobox1
Combobox2.Listindex=.Listindex
Combobox3.Listindex=.Listindex
end with
'...

Cordialement.

lSteph





Bonsoir,

:(
on vous l'a dit et répèté pas de select dans les macros !!!

sauf quand c'est indispensable
et c'est très très très rare.


Désolé, c'est la première fois que j'entends parler de ne pas
sélectionner un objet dans une macro..... Mais puisque tu le dis...

Je vais essayer donc d'être plus explicite. Dans la colonne A se
trouve des abbréviations de cies. ces abbréviations ont trois lettres.
Dans la colonne B, il y a les numéros des produits (trois chiffres).
Puis en colonne C, le nom du produit.

Donc la compagnie DEF se trouve en colonne A peut-être 35 fois si elle
a 35 produits. Avec mon userform, le combobox1 l'usager écrit DEF.
Immédiatement dans le combobox2 apparait le premier numéro à trois
chiffres à côté du premier DEF de la colonne A.

Lorsque j'écris le nombre dans le combobox correspondant dans la
colonne B au produit de la cie DEF, je voudrais qu'Excel commence la
recherche à partir de la ligne correspondant au premier DEF de la
colonne A. La raison est qu'il y a peut-être 20 cies dont le no de
produit est 123. Jusqu'à présent, Excel part toujours du début de la
colonne B au lieu de la ligne correspondante à la recherche
précédente....

J'espère que c'est plus explicite ainsi... Voici le code...

Private Sub ComboBox1_Change()
Call Trouver
End Sub

Sub Trouver()
'On Error Resume Next
Application.ScreenUpdating = False
Sheet1.Select
Nom = ComboBox1
If ComboBox1 = "" Then Exit Sub
Dim c, fistA
Dim msg, Style, Title, response
Style = vbInformation + vbYesNo
Title = ""
With ActiveSheet().Range("Abbrev") ' Colonne A

Set c = .Find(What:=Nom, after:=Range("A2"), LookIn:=xlValues,
Lookat:=xlWhole, searchdirection:=xlNext, MatchCase:=True)

If c Is Nothing Then
question1 = MsgBox("No such abbreviation found !!", vbOKOnly)
ComboBox2.Value = ""
Exit Sub
End If

If Not c Is Nothing Then
fistA = c.Address
Application.GoTo Reference:=Range(c.Address)
ComboBox2.Value = ActiveCell.Offset(0, 1).Value
ComboBox3.Value = ActiveCell.Offset(0, 2).Value
ActiveCell.Offset(0, 1).Select
Sheet3.Select
End If
End With
Sheet3.Select
End Sub

Ensuite je recommence avec le combobox2, mais je veux que la recherche
commence à la cellule active.

Merci

Denys










Avatar
JB
Bonsoir,

http://cjoint.com/?cxvVdJnlH7

Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
'Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox1_Change()
Me.ListBox1.Clear
Me.ListBox2.Clear
Set champ = [A:A]
Set c = champ.Find(Me.ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
premier = c.Address
i = 0
Do
Me.ListBox1.AddItem
Me.ListBox1.List(i, 0) = c.Offset(0, 1).Value
Me.ListBox1.List(i, 1) = c.Offset(0, 2).Value
Me.ListBox2.AddItem c.Offset(0, 2).Value
i = i + 1
Set c = champ.FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End Sub

JB

On 23 fév, 19:52, "Denys" wrote:
Bonjour,

Ce coup-ci, je ne trouve pas. Cela fait suite à ma question posée
précédemment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel sélecte la cellule correspondante.

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. Là,
je voudrais qu'Excel commence la recherche dans la colonne B à partir
de la cellule active suite à la recherche du combobox1 en descendant.

C'est là que je bloque car je dois associer une plage ou une cellule à
la fonction Find et activecell ne fonctionne pas...

Quelqu'un saurait?

Merci

Denys


Avatar
Denys
On 23 fév, 15:47, "JB" wrote:
Bonsoir,

http://cjoint.com/?cxvVdJnlH7

Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
'Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox1_Change()
Me.ListBox1.Clear
Me.ListBox2.Clear
Set champ = [A:A]
Set c = champ.Find(Me.ComboBox1, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
premier = c.Address
i = 0
Do
Me.ListBox1.AddItem
Me.ListBox1.List(i, 0) = c.Offset(0, 1).Value
Me.ListBox1.List(i, 1) = c.Offset(0, 2).Value
Me.ListBox2.AddItem c.Offset(0, 2).Value
i = i + 1
Set c = champ.FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End Sub

JB

On 23 fév, 19:52, "Denys" wrote:



Bonjour,

Ce coup-ci, je ne trouve pas. Cela fait suite à ma question posée
précédemment. Avec mon Userform, je fais un Find dans le combobox1
dans la colonne A et Excel sélecte la cellule correspondante.

Ensuite, avec le combobox2 je choisis un nombre de trois chiffres. Là,
je voudrais qu'Excel commence la recherche dans la colonne B à partir
de la cellule active suite à la recherche du combobox1 en descendant.

C'est là que je bloque car je dois associer une plage ou une cellule à
la fonction Find et activecell ne fonctionne pas...

Quelqu'un saurait?

Merci

Denys- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Bonsoir LSteph, Denis et JB

Merci infiniment pour votre aide. JB c'est très aimable de ta part, je
vais m'inspirer de ton exemple, car il est excellent.

Bonne fin de semaine et merci encore...

Denys