probleme de selection

F

Francis

Guest
Bonsoir
Je débute en Vba et j’ai écrit un petit programme pour cacher les lignes ne contenant pas une expression dans une plage (C1:G 250).
Il fonctionne seulement sur la colonne C. (Parce que je ne sais pas sélectionner les colonnes C à G !)
Quelqu'un pourrait-il m'aider?
Merci pour votre aide
Francis

Sub cherche_valeur()
valtest = InputBox("entrez la valeur à rechercher")

For Each ligne In Range("c1:g250")
r = ligne.Row
chercher = Application.Find(valtest, Cells(r, 3))
If (IsError(chercher)) Then _
Cells(r, 3).EntireRow.Hidden = True
Next

MsgBox "Pas de " & valtest & " dans la plage testée !"

End Sub
 
C

CBernardT

Guest
Bonsoir Francis

Quelques modifs dans la macro.

Sub Recherche_Valeur()
Dim Plage As Range, Cell As Range
Dim ValTest As Variant, AddressUne As Variant

Application.ScreenUpdating = False
With Sheets("Feuil1").Range("C1:G250")
ValTest = InputBox("Entrez la valeur à rechercher")
If ValTest = "" Then Exit Sub
Set Cell = .Find(What:=ValTest)
If Not Cell Is Nothing Then
AddressUne = Cell.Address
Do
Cell.EntireRow.Hidden = True
Set Cell = .FindNext(Cell)
Loop While Not Cell Is Nothing And Cell.Address <> AddressUne
Else
MsgBox ("Pas de " & ValTest & " dans la plage testée !")
End If
End With
Application.ScreenUpdating = True
End Sub

Cordialement

CBernardT
 
F

Francis

Guest
Bonsoir
Tout d’abord merci pour votre travail et je vous en remercie. Votre travail correspond exactement à mon cahier de charge.
Mais ma souris a été plus vite que ma pensée. Je désire en réalité garder uniquement les lignes où existe cette expression.
Donc il faut revenir à mon secours.
Merci d’avance
Francis
 
C

CBernardT

Guest
Bonjour Francis

Vas falloir revoir le timing !!

Un essai qui j'espère satisfera cette fois la souris et la pensée hi hi

Cordialement

CBernardT
 

Pièces jointes

  • RechercherMasquer.zip
    10.9 KB · Affichages: 11
F

Francis

Guest
Bonsoir CBernardT.
Je vois que l’entraide à travers le Net fonctionne bien et cela rend bien des services.
Donc merci pour votre rapidité de votre réponse et les explications de votre programme à l’aide des lignes vertes.
Etant relativement ignare en VBA, serait il possible de me « traduire » la ligne If Application.CountIf (Cell.EntireRow.Range("C1:G1"), ValTest) = 0 And Cell.EntireRow.Hidden = False Then.
Bien entendu il n’y a aucun caractère d’urgence.
Je vous remercie pour votre entraide et vous félicite car cela correspond exactement à ce que je voulais. (Je trie des noms de ville dans une base de données généalogiques).
Un bonsoir cordial de Charente Maritime
Francis
 
C

CBernardT

Guest
Bonsoir Francis

La puissance des propriétés "EntireRow" et "EntireColumn" ainsi d'ailleurs que la propriété "Offset" est d'offrir des outils souples pour calculer de nouveaux objets Range à partir d'une plage d'origine.


Explications sur la ligne de code :
If Application.CountIf (Cell.EntireRow.Range("C1:G1"), ValTest) = 0 And Cell.EntireRow.Hidden = False Then

code à deux conditions :
If (Si) Condition1 And (Et) Condition2 then
Action 1
Else
Action 2
End If

Si les deux conditions sont réalisées alors Action 1 sinon Action 2.


Application.CountIf (), c'est la fonction Nb.si dans les formules.

La propriété EntireRow renvoie toute la ligne de la cellule Cell et .Range("C1:G1") définit la plage entre les colonnes C à G de la ligne de la cellule Cell.

Cell.EntireRow.Hidden = False

Cette propriété a la valeur True si la ligne entière de la cellule Cell est masquée et False si la ligne n’est pas masquée.

Cordialement

CBernardT
 

Discussions similaires

Statistiques des forums

Discussions
313 099
Messages
2 095 237
Membres
106 234
dernier inscrit
JESS97354