modifier code vba pour faire une recherche

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal21

XLDnaute Barbatruc
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) = "G1" Then
    Dim IndexLigne
    If IsEmpty([G1]) Then
        Rows.Hidden = False
    Else
    IndexLigne = Application.Match([G1], Range("D5:D" & Rows.Count), 0)
    If IsError(IndexLigne) Then IndexLigne = Application.Match([G1], Range("G5:G" & Rows.Count), 0)
    If Not IsError(IndexLigne) Then
        If IndexLigne > 1 Then Range("A5:A" & IndexLigne + 3).EntireRow.Hidden = True
    End If
    End If
 End If
End Sub
bonjour le forum
j'ai ce bout de code de Hasco,
qui me permet de trouver la ligne oùu ce trouve une valaur des colonnes d ou g
je code étant très satisfaisant je cherche à le modifier pour qu'il fonctionne de la manière suivante
non plus à partir de la cellule G1 mais A4
pour un tri colonne A
b4 pour un tri colonne B
et D4 pour un tri colonne D
je n'arrive pas à trouver quoi modifier pour que si:
Code:
 If Target.Address(0, 0) = "a4" Then
tri de la colonne A
 If Target.Address(0, 0) = "b4" Then
tri de la colonne B
et
 If Target.Address(0, 0) = "C4" Then
tri de la colonne C
je n'arrive à rien dans mes essai
merci pour votre aide
 
Dernière édition:
Re : modifier code vba pour faire une recherche

bonjour Pascal,

Pour la première partie, je vois que tu as rajouté:
Code:
 If IsEmpty([G1]) Then
        Rows.Hidden = False
    Else

Je ne comprends pas ce que tu veux faire là? Toutes tes lignes sont masquées si G1 n'est pas vide?

Sinon pour la deuxième partie, je ne vois pas le raport avec la première.
ensuite 'Target.Address(0, 0) = "a4" s'écrit:

Code:
Target.Address(0, 0) = "[B]A4[/B]"
Adresse de la cellule en majuscule!

A+ pour plus d'explications.
 
Re : modifier code vba pour faire une recherche

bonjour Pascal,

Pour la première partie, je vois que tu as rajouté:
Code:
 If IsEmpty([G1]) Then
        Rows.Hidden = False
    Else

Je ne comprends pas ce que tu veux faire là? Toutes tes lignes sont masquées si G1 n'est pas vide?

Sinon pour la deuxième partie, je ne vois pas le raport avec la première.
ensuite 'Target.Address(0, 0) = "a4" s'écrit:

Code:
Target.Address(0, 0) = "[B]A4[/B]"
Adresse de la cellule en majuscule!

A+ pour plus d'explications.
il s'agit de la copie du code que tu m'avais envoyé dans un classeur
je ne comprends pas trop le code (syntaxe trop compliqué pour mois)
c'est pour ça que je n'arrive pas à l'adapter
ce que je voulais lorsque tu m'as envoyé ce code
faire une recherche à partir de G1 d'une valeur située colonne D ou G
mais comme ça me donne satisfaction, je voulais le modifier pour que en A4 je trouve la ligne 'une valeur située colonne A
idem pour B et D
je pensais faire 3 codes (1 pour chaque colonne) en modifiant ton code
pour les majuscules j'ignorais totalement
 
Re : modifier code vba pour faire une recherche

Re,

Je me souviens.

Alors je vais te l'expliquer et tu essaieras de l'adapter.

Code:
Private Sub Worksheet_Change(ByVal [COLOR=red][B]Target[/B][/COLOR] As Range)
'Si la cellule (Target) qui vient de changer a pour adresse 'G1'
If Target.Address(0, 0) = "G1" Then
    'Variable qui contiendra un numéro d'ordre de l'ocurrence trouvée
    'dans la plage de recherche
    Dim IndexLigne
 
    'Si G1 est vide on affiche toutes les lignes
    If IsEmpty([G1]) Then
        Rows.Hidden = False
    Else
    'La fonction Application.Match est l'équivalent VBA de la fonction EQUIV
    'On recherche G1 dans la Plage "D5:D65536" (version xl<2007)
    IndexLigne = Application.Match([G1], Range("D5:D" & Rows.Count), 0)
 
    'Si G1 est n'est pasTrouvé on tente une recherche dans la plage
    'G5:G65536

    If IsError(IndexLigne) Then IndexLigne = Application.Match([G1], Range("G5:G" & Rows.Count), 0)
 
    'Si G1 a été trouvé dans une des deux plage de cellule
   'alors on cache les lignes de A5 à A et indexdeligne +3 (à cause de l'entête si je me souviens bien)
 
    If Not IsError(IndexLigne) Then
        If IndexLigne > 1 Then Range("A5:A" & IndexLigne + 3).EntireRow.Hidden = True
    End If

    End If
End If
End Sub

1 - Verifier que la celllule qui vient de changer est la bonne :

Code:
IF not Intersect(Target,[A4],[B4],[D4],[G1]) is nothing Then
'Suite du code

2 - que mettre dans Application.Macth?
ce que tu mettrais dans la fonction Equiv d'une feuille excel
Application.Match(CelluleCherchee, PlageDeRecherche, 0)

A partir de cela fait quelque chose et si cela ne va pas du tout, reviens avec un bout de fichier et des explication précises.

A bientôt
 
Re : modifier code vba pour faire une recherche

j'ai fini par trouver il fallait modifier cette ligne
Code:
 IndexLigne = Application.Match([G1], Range("[COLOR="Red"]D5:D[/COLOR]" & Rows.Count), 0)
A5:A pour colonne A etc....
Merci Hasco pour ton aide
je vais lire attentivement ton tuto
car si il y a des lignes de code faciles à traduire d'autres me sont totalement opaques
bonne soirée
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
735
Réponses
15
Affichages
788
Réponses
2
Affichages
411
Retour