Sélection cellule résultat de Find qui bug

Blafi

XLDnaute Occasionnel
Bonjour à tous,

J'ai un bout de procédure dans mon fichier d'adhérents à un skiclub, qui bug et je ne sais pas pourquoi:

En deux mots j'ai une boite de dialogue dans laquelle j'ai des listbox. La listbox1 me permet de choisir des adhérents parmi la liste des adhérents dont le nom (variable par "décaller...") est défini par [NPAdhérents].

A l'intérieur d'un With...End with, une boucle prend chaque Nom sélectionné et le rentre dans une feuille "Liste".
Ensuite, en utilisant ce Nom, je recherche à l'intérieur d'un second With ...End With dans la feuille "Adhérents" (et donc à l'intérieur de mon with précédent et dans une autre feuille que "Liste") et avec la méthode Find, le Nom de mon adhérent afin de copier le contenu de la cellule qui donne son age.... Et c'est là que ça bug...

J'ai tout essayé pour arriver à sélectionner cette fameuse cellule de la feuille "Adhérents", j'obtiens toujours une erreur, jamais la même suivant la formulation employée...

Je vous mets mon code ci-après. Quelqu'un peut-il me dire ce qui pose pb ?

--------------
'entre les renseignements
With Sheets("Liste")

' pour chaque choix dans listbox1
For j1 = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(j1) = True Then
Nom = ListBox1.List(j1)
' copie les données de l'adhérent sélectionné
'cherche et fixe le numéro de la dernière Ligne2 remplie
Ligne2 = .Range("A65536").End(xlUp).Row + 1
.Range("A" & Ligne2) = Nom


'cherche la cell correspondant au nom dans la feuille adhérents
With Worksheets("Adhérents").[NPAdhérents]
Set c = .Find(What:=Nom, LookAt:=xlWhole, LookIn:=xlValues)
If c Is Nothing Then
MsgBox "données non trouvées"
Exit Sub
Else
'MsgBox c.Address(rowabsolute:=False, columnabsolute:=False)

LaCell = c.Address(rowabsolute:=False, columnabsolute:=False)

'ci-dessous il m'affiche bien l'adresse de la cellule recherchée dans la boite de dialogue :
MsgBox LaCell

'mais là il refuse de sélectionner cette cellule :(et c'est là que ça bug !!!
.range(Lacell).Select

'copie l 'age
.ActiveCell.Offset(0, 2).Copy

End If
End With

......./...... Le code continue alors avec le premier With...


Si quelqu'un peut m'aider... merci !
A++
 

job75

XLDnaute Barbatruc
Re : Sélection cellule résultat de Find qui bug

Bonjour Blafi,

Code:
.range(Lacell).Select

vous voulez sélectionner la cellule, mais la feuille n'est pas activée, donc :

Code:
.Activate
.range(Lacell).Select

Mais si vous vous débrouillez correctement, il est inutile de sélectionner... Voir l'aide VBA sur Copy.

A+
 

Pierrot93

XLDnaute Barbatruc
Re : Sélection cellule résultat de Find qui bug

Bonjour Blafi

il manque un "end with", pas top d'analyser un code en l'état, tu devrais au moins mettre les balises, cliquer sur le #, d'autre part ton code n'est pas complet, nous n'avons ni le début ni la fin de procédure et aucune déclaration de variable...

bonne fin d'après midi
@+

Edition : bonjour Job
 
G

Guest

Guest
Re : Sélection cellule résultat de Find qui bug

Bonjour Blafi,

Avant ton select (sur la feuille Adhérents), il faut Activer ta feuille.

Mais tu n'es pas obligé de selectionner pour copier, après ton find:
Code:
if c.offset is nothing
    ......
else
   c.Offset(0,2).Copy
end if

De plus imbriquer les With...End With sur des objets(ici des feuilles) différents rend non seulement la lecture mais aussi le débogage plus difficile.

A+
[edit] Salut Pierrot:)
 

Gorfael

XLDnaute Barbatruc
Re : Sélection cellule résultat de Find qui bug

Salut Blafi et le forum
Je vous mets mon code ci-après. Quelqu'un peut-il me dire ce qui pose pb ?
Je te mets un bout de solution :D
Code:
With Sheets("Liste")
    ' pour chaque choix dans listbox1
    For j1 = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(j1) Then
            .Range("A65536").End(xlUp)(2) = ListBox1.List(j1)
            'cherche la cell correspondant au nom dans la feuille adhérents
 
            Set c = Worksheets("Adhérents").[NPAdhérents].Find(What:=Nom, LookAt:=xlWhole, LookIn:=xlValues)
            If c Is Nothing Then
                MsgBox "données non trouvées"
                Exit Sub
            Else
            'MsgBox c.Address(rowabsolute:=False, columnabsolute:=False)
                Lacell = c.Address(0, 0)
                'ci-dessous il m'affiche bien l'adresse de la cellule recherchée dans la boite de dialogue :
                MsgBox Lacell
                'copie l 'age
                c.Offset(0, 2).Copy
            End If
Quelques remarques :

- With est là pour aider à racourcir le code. Mais imbriquer des with sans aucune relation entre eux n'est jamais une bonne solution.
With A
With .B
range(x)
donnera A.B.range(x)

- Donner du code sans les indentations (conservées avec l'utilisation des balises code) rebute facilement et limite le nombre de personnes ayant envie de s'interesser à ton problème.

- Ne donne pas un extrait d'une macro à dépanner. Le problème peut venir d'ailleurs. Si tu demandes de l'aide, c'est parce que tu n'as pas trouvé l'erreur de ton code. Et comment trouver cette erreur sans le code. Et ne t'inquiète pas, on ne s'en servira pas pour te faire des misère, juste pour t'aider :D.

- Utiliser des Select/Selection n'est jamais une bonne idée : ça ralentit bêtement ta macro, et suivant le module utilisé, ça te créera une erreur.

- "If ListBox1.Selected(j1) = True Then" revient à écrire : si "ListBox1.Selected(j1) = True" est vrai alors. en gros : si (A=Vrai)=vrai alors => autant supprimer les égalités inutiles et mettre si A=vrai alors ...
A+
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Sélection cellule résultat de Find qui bug

bonjour le fil

comme suit c'est ok

évite certainement des aller retour code objet
'entre les renseignements
With Sheets("Liste")
.Range("C2").Value = DTPicker1.Value
.Range("E2").Value = DTPicker1.Value
.Range("B4").Value = ComboBox1.Value
.Range("F4").Value = ComboBox2.Value
.Range("F5").Value = ComboBox3.Value
.Range("B6").Value = ComboBox4.Value

' pour chaque choix dans listbox1.Range("A65536").End(xlUp)(2)
For j1 = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(j1) Then
nom = ListBox1.List(j1)
.Range("A65536").End(xlUp)(2) = nom

'cherche la cell correspondant au nom dans la feuille adhérents
'nom était vide
Set c = [NPAdhérents].Find(What:=nom, LookAt:=xlWhole, LookIn:=xlValues)
If c Is Nothing Then
MsgBox "données non trouvées"
Exit Sub
Else
'MsgBox c.Address(rowabsolute:=False, columnabsolute:=False)
Lacell = c.Address(0, 0)
'ci-dessous il m'affiche bien l'adresse de la cellule recherchée dans la boite de dialogue :
' MsgBox Lacell
'copie l 'age
' c.Offset(0, 2).Copy ' Destination:=.Range("D65536").End(xlUp)(2)
'ou
.Range("D65536").End(xlUp)(2) = c.Offset(0, 2) '.Copy
End If
End If

Next j1

End With

pour moi with end with c'est plus que simplifier le code

à bientôt
 

Blafi

XLDnaute Occasionnel
Re : Sélection cellule résultat de Find qui bug

Re bonjour à tous,

Mes excuses pour le retard mais j'étais absent tout l'après-midi....

Merci aux nombreux contributeurs qui ont bien voulu me faire part de leurs remarques et solutions... C'est vrai que je ne suis pas très satisfait d'avoir envoyé mon bout de code "en vrac" mais je n'ai pas encore trouvé la manip à faire pour le poster correctement indenté (certains me parlent d'utiliser # mais je n'ai pas bien compris comment faire).

Je vais regarder vos solutions avec attention, notamment celle de Bebere qui m'avait déja bien dépanné l'autre jour... et il s'en est rappelé Dieu merci...

Merci aussi à tous les autres, je vais essayer de régler mon pb en utilisant vos remarques et suggestions et si je ne m'en sors pas.. c'est promis je ferai mieux que cette fois pour poster ma demande...

A bientôt et bonne fin de journée à tous...

le 11/11/09 : c'était bien l'imbrication des with qui posait problème. Je les ai supprimés comme conseillé par les réponses ci-dessus et tout marche... SUPER !
 
Dernière édition:

Discussions similaires