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
Le message d'erreur concerne la ligne : "Range(Left(xSelection, Len(xSelection) - 1)).Select"
Le message d'erreur affiché est :"La méthode 'range' de l'objet '_Global' a échoué"
merci beaucoup, j'esper que vous réussirez à me débloquer
la fenêtre exécution est située entre "débogage" et "outils" dans l'éditeur VBA c'est bien cela??? Je vois dans cette fenêtre qu'il y a trois choix qui s'affichent : "continuer, réinitialiser, mode création"? Je ne vois pas où j peux rentrer la ligne de code que tu m'a donné
désolé lol, je dois surement ne pas avoir bien compris les directives que tu m'as donné
Au moment du plantage, tu devrais avoir un message qui te propose : Continuer, Fin, Débogage. Choisi Débogage. L'éditeur VBA s'ouvre et il met en surbrillance la ligne incriminée.
Je ne sais pas comment sont arrangées tes fenêtres. Fais [CTRL+G], tu devrais être dans la fenêtre Exécution. Tape z'y Print .. puis [ENTER] (Print ou ? c'est pareil) et observe le résultat.
Sinon, tu peux toujours ajouter dans ton code, juste avant la ligne qui pose problème, la ligne suivante :
Salut Zeb, Je viens à l’instant de taper la ligne de code que tu m’as passée, et j’ai pu observer dans l’exécution que toutes les adresses des cellules dans lesquelles figure le mot recherché sont affichées.
Zeb, si il y a d'autres indications que tu souhaites n'hésite pas à me demander. En tout cas je te remercie beaucoup de m'aider spontanément Passe uen bonne soirée; tibss
Je crois que tu viens simplement de découvrir que la pensée humaine est infinie, mais que les ordinateurs sont des machines finies.
Tu prétends aller au delà des capacités d'Excel, c'est tout. Il faut donc faire autrement.
Par ailleurs, en observant tes données, pour l'étude, j'ai viré les $, les C, les virgules et le 1 de mille et je constate qu'il a des cellules qui se suivent.
J'ai vérifié, même en écrivant "C12:C16..." au lieu de "$C$12,$C$13,$C$14,$C$15,$C$16...", ce qui ramène la longueur du texte de ~3000 caractères à ~ 400, ça plante au même endroit. Il semble que ce soit la complexité de la zone qui pose problème.
Merci Zeb, je pense que je vais modifier mon pgm.
Le but de ce dernier était de sélectionner les éléments recherchés, de sélectionner les lignes entières sur lesquelles les éléments recherchés se trouvent, et de les recopier sur une autre feuille.
Pour cela, le programme donnait :
Code :
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
'sélection de la ligne à partir de la sélection d'une celule
Selection.EntireRow.Select
'permet de copier et coller une ligne sur une autre feuille
Selection.Copy
Sheets("Feuil2" ).Select
k = ActiveSheet.UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 1
Cells(k, 1).Select
ActiveSheet.Paste
Le problème principal est, comme nous l'avons vu, que la recherche en marche pas pour un grand tableau.
Ce que pensais faire maintenant c’est sélectionner et recopier chaque ligne qui correspond à la cellule contenant l’élément recherché. Une fosi que la ligne a été recopiée, on recherche la cellule suivante et on recopie sa ligne... et ainsi de suite jusqu'à ce que toutes les lignes contenant les éléments recherchés soient recopiés. Comme cela il n’y aurait pas de saturation au niveau de la mémoire… Le pbm est que je ne sais pas trop comment m’y prendre.
J’ai pensé à un pgm qui en marche pas pour la recherche de dates :
Code :
Sub Macro1()
'
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
Ce programme marche très bien pour la recherche de mots, mais cela bug pour la recherche de dates.
Dans mon tableau excel, les dates sont sous la forme : févr-2005 ou juin-2006. Quand on tape la date il faut écrire par ex : 01/02/2005, et excel converti automatiquement cette date en févr-2005. Ainsi, lorsqu’on fait une recherche, il faut rechercher 01/02/2005 et non pas févr-2005.
Ce type de recherche marchait très bien avec le programme précédent, mais avec le dernier, il y a un bug lorsque je fais ce type de recherche…
Donc je suis vraiment bloqué… Si tu pouvais me dépanner ca me sauverait, surtt ke je suis novice dc c pas facile... merci bcp
(ce qui correspond janv-05 dans le tableau) et c'est pour celà que lorsque je fait une recherche, je la fait sous la forme 01/01/2005 pour janv-05 par exemple.
Si j'avais à rechercher févr-2005 je ferai une recherche 01/02/2005.
Voilà. Malgré celà, la recherche est infructueuse.
ej n esais pas comment déclarer "plage" aussi. Donc voili
je debute sur vba et aurais besoin d'aide pour programmer une macro.
je vous explique: j'ai feuil1 (qui est ma source de donnees) avec en colonne A les noms de 9 sites, en colonne B des numeros de serie et en colonne D des quantites. Il y a des doublons car le meme numero de serie peut apparaitre dans chaque site.
Je souhaite renvoye les quantites sur une nouvelle feuille (feuil2) mais en separant les noms de sites par colonne.