Macro excel - recherche dans un tableau

Signaler
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

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é :(
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Ok mais que se passe t-il lorsque xSelection contient plus de 2 cellules ?
A mon avis, c'est là que ça coince ...
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

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.
Messages postés
2
Date d'inscription
lundi 11 mai 2009
Statut
Membre
Dernière intervention
26 octobre 2009

Messages postés
2
Date d'inscription
lundi 11 mai 2009
Statut
Membre
Dernière intervention
26 octobre 2009

salu,j'ai besion d'une fonction qui fait la recherche dans un tableau trié en c#
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+