Se connecter avec
S'enregistrer | Connectez-vous

RECHERCHE AVEC MACRO

Dernière réponse : dans Programmation

BONJOUR,
QUELQU UN SAIS S IL EST POSSIBLE DE CREER UNE CELLULE OU LE TEXTE QU ON Y ENTRE SERAIS RECHERCHÉ AUTOMATIQUEMENT SANS APPUYER SUR ENTER?

PAR EXEMPLE UNE COLONE DE NUMERO DE TELEPHONE ET DES QU ON ECRIS DES CHIFFRE EN A1 PAR EXEMPLE, LES NUMERO QUI NE CORRESPONDENT PAS SON CACHÉ ET CEUX QUI CORRESPONDENT RESTE VISIBLE.
EX: CELL A1 ON Y ECRIS 450

DANS LA LISTE RESTE UNIQUEMENT LES NUMERO 450...

J ESPERE QUE C EST CLAIR.. LE PLUS DURE C EST QUE LE TRI SE FASSE A MESURE QUE L ON ECRIS , SANS ETRE OBLIGÉ DE FAIRE ENTER..

Autres pages sur : recherche macro

Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

Non, ce n'est pas possible (*) : l'événement OnChange d'Excel ne traite que les changements après validation.


_________

(*) En fait, rien n'est impossible bien sûr, mais je ne m'engage pas sur le terrain de refaire le gestionnaire d'événements d'Excel.

Ok, oui j espère!!:) 
car j ai une macro qui affiche l heure en temps réelle, une sorte d horloge numérique en quelque sorte... et pour ce faire c est une genre de macro en boucle qui récupère l heure sur window a chaque instant je crois,avec un code anti-bogue pour nous permettre de garder le controle sur la page.
Je ne suis pas trop expert en vba alors une bonne partie de cette macro est du chinois pour moi, c est pour celà que je me demandais si ça pourrait s appliquer a mon cas..

Une solution est d'utiliser une textbox a la place d'une cellule pour taper ton texte.
L'événement "change" de la textbox est appeler à chaque fois que tape.

Sinon, la macro dont tu parles, utilise certainement la fonction ontime, le problème est qu'on ne peut pas accéder au contenu d'une cellule tant que que ce que tu tapes n'est pas validé (enter), il est donc impossible d'utiliser cette méthode.

tu saurais pas comment rechercher du text lettre par lettre de la gauche.. ex je veux que si je met un 4 tout les cell qui commence par un 4 reste...j ajoute un 2 bah toute celle avec un 42 au debut reste..un genre de tri par correspondance exact.. au fond tout ma page sera caché, puis avec ce tri je vais faire apparaitre le nom de plage ou les nom de plage correspondantes..

PATPOWER a dit :
tu saurais pas comment rechercher du text lettre par lettre de la gauche.. ex je veux que si je met un 4 tout les cell qui commence par un 4 reste...j ajoute un 2 bah toute celle avec un 42 au debut reste..un genre de tri par correspondance exact.. au fond tout ma page sera caché, puis avec ce tri je vais faire apparaitre le nom de plage ou les nom de plage correspondantes..


Salut un astucieux mélange des fonctions "left" et "len" devrait faire l'affaire
L'expemple ci-dessous montre comment faire ce que tu veux sur la colonne c pour les 10 premières lignes
  1. Private Sub TextBox1_Change()
  2. Dim tempstring
  3. For i = 1 To 10
  4. tempstring = Left(Cells(i, 3).Value, Len(TextBox1.Value))
  5. If tempstring <> TextBox1.Value Then
  6. Rows(i).RowHeight = 0
  7. Else
  8. Rows(i).RowHeight = 14
  9. End If
  10. Next i
  11. End Sub


P.S. Il existe d'autre moyen pour faire disparaître les cellules que tu veux cacher, p.ex. écrire en blanc sur blanc
Expert Programmation

Rholala !
drul, jette un oeil à l'opérateur Like. Tu réviseras ton avis sur le mélange Left et Len

;) 

_____
(Je cherche un moyen de récupérer l'événement ON_CHANGE du composant "éditeur de cellule". Pour l'instant, je patauge.)

zeb a dit :
Rholala !
drul, jette un oeil à l'opérateur Like. Tu réviseras ton avis sur le mélange Left et Len

;) 

_____
(Je cherche un moyen de récupérer l'événement ON_CHANGE du composant "éditeur de cellule". Pour l'instant, je patauge.)

J'ai pas dit que c'était parfait ...
On peut effectivement faire plus simple avec like, j'ai fait ça un peu vite :( 

Mais tu gagnes quand même une ligne dans le code, quel progrès :) 
(en temps d'exécution par contre, je me demande ce qu'il y a derrière like ...)
Expert Programmation

>> J'ai pas dit que c'était parfait ...
Ah, moi non plus :o 

Le VB est un langage interprété déplorablement long. En revanche, les fonctions internes sont en général plus efficaces car compilées.

-------

Ah ne me cherche pas sur le terrain de la condensation de code, je suis un maboul :pt1cable: 
  1. Sub TextBox1_Change()
  2. Dim cell As Range
  3. For Each cell In Range("C1:C10")
  4. cell.EntireRow.RowHeight = IIf(TextBox1.Value Like Cells.Value & "*", 0, 14)
  5. Next
  6. End Sub


:lol:  :lol:  :lol: 

je ne connais pas cette fonction..mais je dois récupérer le nom dans la colone a droite de la valeur recherchée..ce nom correspond à un nom de plage, plage que je dois montrer. donc je prendrais ton code (qui marche bien) mais au lieu de cacher ou montrer directement la ligne, je cacherais ou montrerais la plage correspondante au nom.
Vous aurez sans doute des question..hehe
merci beaucoup pour votre aide en passant!

zeb a dit :
>> J'ai pas dit que c'était parfait ...
Ah, moi non plus :o 

Le VB est un langage interprété déplorablement long. En revanche, les fonctions internes sont en général plus efficaces car compilées.

-------

Ah ne me cherche pas sur le terrain de la condensation de code, je suis un maboul :pt1cable: 
  1. Sub TextBox1_Change()
  2. Dim cell As Range
  3. For Each cell In Range("C1:C10")
  4. cell.EntireRow.RowHeight = IIf(TextBox1.Value Like Cells.Value & "*", 0, 14)
  5. Next
  6. End Sub


:lol:  :lol:  :lol: 


Très joli, bravo, je connaissais pas IIF,
je m'endormirai moins idiot. :pt1cable: 

Edit: remarque, ce serait pas plutôt:
  1. Sub TextBox1_Change()
  2. Dim cell As Range
  3. For Each cell In Range("C1:C10")
  4. cell.EntireRow.RowHeight = IIf(TextBox1.Value & "*" Like Cells.Value, 0, 14)
  5. Next
  6. End Sub
Expert Programmation

Oups... Si, bien sûr !

Eh ! T'as découvert Like et IIf() en même temps :D 

Joli, joli... Faut voir. Souvent, un code bien clair est plus facile à déboguer et à maintenir qu'un truc hyper condensé.

Avec un Like, on est dans la programmation claire, avec des Len(), Mid(), Left() imbriqués, on est dans la complication, avec des IIf() on est dans le codage touffu et fouillis.
Tout ça pour dire que bien programmer, c'est utiliser la bonne fonction au bon moment, et pas tenter de gagner 2,5 lignes de code ;) 

ca ressemble a : numero telephone nom service1 date
service2 date
service3 date

la plage qui englobe toutes ces cell s appelle comme le nom car le meme telephone peut servir pour plusieurs personne d une meme famille..

donc je veut que en inscrivant le telephone il ne me reste que les correspondances,par la suite je vais choisir probablement dans un menu deroulant un nom s il en a plus d un. Donc je doit montrer ou cacher un nom de plage qui correspond a la cell a droite du telephone.

zeb a dit :
Oups... Si, bien sûr !

Eh ! T'as découvert Like et IIf() en même temps :D 

Joli, joli... Faut voir. Souvent, un code bien clair est plus facile à déboguer et à maintenir qu'un truc hyper condensé.

Avec un Like, on est dans la programmation claire, avec des Len(), Mid(), Left() imbriqués, on est dans la complication, avec des IIf() on est dans le codage touffu et fouillis.
Tout ça pour dire que bien programmer, c'est utiliser la bonne fonction au bon moment, et pas tenter de gagner 2,5 lignes de code ;) 


Tu as parfaitement raison, et like, je vais utiliser, iif, pas sûr ...

PATPOWER a dit :
ca ressemble a : numero telephone nom service1 date
service2 date
service3 date

la plage qui englobe toutes ces cell s appelle comme le nom car le meme telephone peut servir pour plusieurs personne d une meme famille..

donc je veut que en inscrivant le telephone il ne me reste que les correspondances,par la suite je vais choisir probablement dans un menu deroulant un nom s il en a plus d un. Donc je doit montrer ou cacher un nom de plage qui correspond a la cell a droite du telephone.


Salut PAT POWER, étant papa depuis moins d'une journée, je vais manqué de temps pour m'occupé de ton problème, dsl.
Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :