Macro excel - recherche dans un tableau

tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006 - 27 avril 2006 à 16:22
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 26 oct. 2009 à 10:26
Salut tout le monde,    
j'essaie de réaliser une macro de recherche via une inputbox sous excell. Le programme que j'ai réalisé pour l'instant ne marche que sur un petit classeur; pour un classeur de plus de 1500 lignes (et une dixaine de colonnes), cela ne marche pas et celà affiche cette erreur : "La méthode 'Range' de l'objet _Global a échoué"   . Voici le pgm :  
 
 
Dim xCellule As Range
Dim xSelection As String
Dim Message As String
 
'Crée une boîte de dialogue :
  Message = InputBox(" Entrez la date  : ", "Mon Programme", "01/mm/aaaa")
 
 
'Arrête procédure si utilisateur clique sur annuler
If Message = "   " Then Exit Sub
 
'Place la valeur dans la cellule A1;
'Worksheets("feuil2").Range(" A1 ").Value = Message
 
'Sélectionner le tableau :
'sélectionner toutes les cellules du tableau :
 
Selection.Worksheet.UsedRange.Select
 
'activer la dernière cellule du tableau
Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count).Activate
 
'Recherche " Message " dans le tableau :
 
For Each xCellule In Selection
    If xCellule.Value = Message Then
        xSelection = xSelection & xCellule.Address & ","
    End If
Next
    If Len(xSelection) > 0 Then
        Range(Left(xSelection, Len(xSelection) - 1)).Select
    End If
 
 
Quelqu'un saurait-il me dire comment résorber ce problème?
merci d'avance  

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2006 à 03:34
Salut
Dans ta recherche "For Each", quand tu trouves ta date dans une cellule, tu mémorises l'adresse de la Cellule + virgule.
Si 3 cellules répondent au critère, tu auras donc xSelection = "A3, B25, F320,"
Dans ton Range, tu essayes de lui entrer A3, B25, F320
A mon avis, ça risque de ne pas passer.
Voir si le séparateur est bien une virgule (à mon avis, c'est un point-virgule ;)
Voir quelle est la valeur de xSelection après la boucle de recherche :
Place ton curseur sur la ligne "If Len(xSelection ..." et appuie sur la touche F9 : le programme s'arrêtera sur cette ligne
Survole avec la souris la vraible xSelection : Il t'affichera son contenu et vérifie

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
28 avril 2006 à 12:03
En ce qui concerne xselection, c'est bien une "," qu'il faut mettre.
Pour le reste, j'ai fait ce que tu m'as dit et je n'ai rien réussi à déceler.
Dc voili toujours bloké :(
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 avril 2006 à 19:25
Ok mais que se passe t-il lorsque xSelection contient plus de 2 cellules ?
A mon avis, c'est là que ça coince ...
0
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
29 avril 2006 à 12:46
lorsque xSelection  contient plus que 1 cellule cela marche; cela marche pour au moins 10 ccellules slectioonnées, j'ai fait le test.
mais pour un nombre de 100 cellules cela ne marche pas.
0

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

Posez votre question
cs_nwira Messages postés 2 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 26 octobre 2009
26 oct. 2009 à 08:19
0
cs_nwira Messages postés 2 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 26 octobre 2009
26 oct. 2009 à 08:28
salu,j'ai besion d'une fonction qui fait la recherche dans un tableau trié en c#
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
26 oct. 2009 à 10:26
Salut,

utilise la méthode Union !

3 tests pour te démontrer son interet:

Sub test()
    'la limite de la propriété range
    Dim maplage As String
    For i = 1 To Columns("A").Rows.Count
        maplage = maplage & "A" & i
        On Error Resume Next
        Range(maplage).Select
        If Not Err = 0 Then Exit For
        maplage = maplage & ","
    Next
    MsgBox "La longueur max d'une chaine pour la propriété range est de: " & Len(maplage) - (1 + Len(i)) & " caracteres !"
End Sub


Sub test2()
    'test sur la methode Union
    Dim maplage As Range
    Set maplage = Range("A1")
    For i = 2 To Columns("A").Rows.Count
        Set maplage = Union(maplage, Range("A" & i))
    Next
    maplage.Select
    MsgBox maplage.Cells.Count
End Sub

Sub test3()
    'l'objet range testé sur la selection de toutes les cellules d'une feuille
    Cells.Select
    MsgBox "Nombre de cellule dans la selection: " & Selection.Cells.Count
End Sub



A+
0
Rejoignez-nous