XL 2016 Mettre 0 décalé de 20 cases après avoir trouvé un Texte

Stéfane

XLDnaute Occasionnel
VB:
Sub Mettre_0_Cellule_20
Dim zone As Range
Dim der_ligne As Long
Dim I&
    Set zone = Range("C28").CurrentRegion
    der_ligne = zone.Rows(zone.Rows.Count).Row
        For I = der_ligne To 1 Step -1
            If Cells(I, 3).Text = "TEXT 1 " & "TEXT 2" Then
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
             Rows(I, 20).Select            C'est là que je bloque
             Selection.FormulaR1C1 = 0
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''             
            End If
        Next
End Sub

Avec cette macro, je souhaite mettre "0" dans la cellule qui se trouve 20 cellules vers la droite sur la même ligne, après la détection des mots ''TEXT 1'' et ''TEXT 2'' dans la colonne "C"
J'ajouterais d'autres mot par la suite, à rechercher, pour réaliser la même démarche.

Auriez-vous svp une solution pour compléter cette macro.

Merci pour votre aide
 

Stéfane

XLDnaute Occasionnel
Merci pour votre retour Sylvanu,

Je viens de faire un tableau qui donne une idée de ce à quoi je souhaite arriver.
Le but de la macro à la base et de ne pas avoir à définir de cellule pour retrouver TEXT 1 TEXT 2 .... dans la colonne du tableau mais que la macro le face elle même en lui indiquant les mots qu'elle doit chercher et mettre 0 en colonne 22.
C'est pour cela que je souhaitez savoir si en adaptant la macro il était possible de réaliser une recherche dans la même colonne "C" mais avec des mots différents (sans avoir besoin de lui dire si le mot que je cherche ce trouve 1,2,3,10,30.... lignes en dessous) et une fois trouvé mettre 0 cellule 22.
Cela me permettre de masquer ensuite ces ligne grâce à une autre macro.
 

Pièces jointes

  • TEST1.xlsm
    13.2 KB · Affichages: 0

Staple1600

XLDnaute Barbatruc
Re

Sylvanu
Sur la base de ton fichier, et en ayant compris cela, j'ai pondu ceci
VB:
Sub Macro11()
[AD2].FormulaR1C1 = "=AND(ISNUMBER(SEARCH(""TEXT 1"",RC[-27])),ISNUMBER(SEARCH(""TEXT 2"",RC[-27])))"
Range("C2:C28").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("AD1:AD2"), Unique:=False
[_FilterDataBase].Offset(, 20).SpecialCells(xlCellTypeVisible).Value = 0
End Sub
Et mes zéros ne vont pas où vont les tiens ;)
 

Stéfane

XLDnaute Occasionnel
Merci Stample1600

Cette formule fonctionne bien, c'est juste que du coup je suis obligé de définir moi même le plage (cela n'est pas le but car je souhaite que la macro recherche elle même le TEXT 1 TEXT 2 TEXT 3.... (ce qu'elle fait à la base) et pas besoin de masquer les lignes (une autre macro ce charge de cela). C'est juste mettre 0 case 22 en V si les mots sont trouvés dans la colonne.
 

Staple1600

XLDnaute Barbatruc
Re

En V ou en W?

Comme l'a dit sylvanu, si tu joignais un fichier exemple au plus proche de ta réalité, ce serait plus simple pour faire des tests.

Et pour ne pas laisser le filtre, c'est simple
VB:
Sub Macro11b()
Application.ScreenUpdating = False
[AD2].FormulaR1C1 = "=AND(ISNUMBER(SEARCH(""TEXT 1"",RC[-27])),ISNUMBER(SEARCH(""TEXT 2"",RC[-27])))"
Range("C2:C28").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("AD1:AD2"), Unique:=False
[_FilterDataBase].Offset(, 20).SpecialCells(xlCellTypeVisible).Value = 0
ActiveSheet.ShowAllData
End Sub
 

Staple1600

XLDnaute Barbatruc
Et la version paramétrée

Testé avec le fichier de Sylvanu
Lancer la macro ito
VB:
Sub ito()
Application.ScreenUpdating = False
ZeroFicator "TEXT 1", "TEXT 2"
End Sub
Private Sub ZeroFicator(Umma As String, Gumma As String)
[AD2].FormulaR1C1 = "=AND(ISNUMBER(SEARCH(" & Chr(34) & Umma & Chr(34) & ",RC[-27])),ISNUMBER(SEARCH(" & Chr(34) & Gumma & Chr(34) & ",RC[-27])))"
Range("C2:C28").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("AD1:AD2"), Unique:=False
[_FilterDataBase].Offset(, 20).SpecialCells(xlCellTypeVisible).Value = 0
ActiveSheet.ShowAllData
End Sub
 

Stéfane

XLDnaute Occasionnel
Je l'avais joint page précédente. Voilà je l'ai remis.

Le but de la macro à la base et de ne pas avoir à définir de cellule pour retrouver TEXT 1 TEXT 2 .... dans la colonne du tableau mais que la macro le face elle même en lui indiquant les mots qu'elle doit chercher et mettre 0 en colonne 22.
C'est pour cela que je souhaitez savoir si en adaptant la macro il était possible de réaliser une recherche dans la même colonne "C" mais avec des mots différents (sans avoir besoin de lui dire si le mot que je cherche ce trouve sur les lignes 1,2,3,10,30.... ou ..... lignes en dessous) et une fois trouvé mettre 0 cellule 22.
Cela me permettre de masquer ensuite ces ligne grâce à une autre macro qui me permet aussi de filtrer d'autres lignes.
 

Pièces jointes

  • TEST1.xlsm
    13.2 KB · Affichages: 5

Stéfane

XLDnaute Occasionnel
Oui bien sur, c'est pour cela que dans cet exemple je recherche TEXT 1 TEXT 2....
Ce que fait cette macro :

Sub A_Masquer_Lignes_NON_Voulues()

Dim zone As Range, der_ligne As Long, I&
Set zone = Range("C28").CurrentRegion
der_ligne = zone.Rows(zone.Rows.Count).Row
For I = der_ligne To 1 Step -1
If Cells(I, 3) Like "*TEXT 1*" Then
Cells(I, 22) = 0
End If
Next
End Sub

C'est juste voir si à côté de TEXT 1 comment ajouter TEXT 2 TEXT3 ... pour qu'elle cherche les mots TEXT 2 TEXT3 ... sachant que ces mots sont en colonne C sur des cellules que va chercher la macro et mettre 0 en V cellule 22.

Staple1600 j'ai essayé, ne te fâche, pas mais là j'ai du mal à adapter cette macro sur mon tableau..... J'ai pas ton niveau....
 

Stéfane

XLDnaute Occasionnel
Si cela peut-être plus clair, c'est pour éviter de faire :

Sub A_Masquer_Lignes_NON_Voulues()

Dim zone As Range, der_ligne As Long, I&
Set zone = Range("C28").CurrentRegion
der_ligne = zone.Rows(zone.Rows.Count).Row
For I = der_ligne To 1 Step -1
If Cells(I, 3) Like "*TEXT 1*" Then
Cells(I, 22) = 0
End If
Next

Set zone = Range("C28").CurrentRegion
der_ligne = zone.Rows(zone.Rows.Count).Row
For I = der_ligne To 1 Step -1
If Cells(I, 3) Like "*TEXT 2*" Then
Cells(I, 22) = 0
End If
Next

ETC...........................................................
End Sub

Mais quelque chose de plus simple du style : If Cells(I, 3) Like "*TEXT 1*","*TEXT 2*"......... Then
 

Staple1600

XLDnaute Barbatruc
Re

La macro liée à ton bouton est restée sur ton PC ;)
'https://t*******c-my.sharepoint.com/personal/stephane_****_cpg-europe_com/Documents/Desktop/2022 OFFRE CPG.xlsm'!AA_test_00000

NB: Tu auras remarqué que j'ai préservé ton anonymat ;)
 

Stéfane

XLDnaute Occasionnel
Oui il fonctionne très bien sur la feuille de Sylvanu à la seule condition que sur la même ligne il y ai TEXT 1 et TEXT 2
Dans mon cas comme sur la feuille jointe ces 2 mots sont plutôt dans la même colonne C et j'ai différents mots comme cela à trouver pour mettre 0 en V.
D'où la macro si dessus ou je dois la reprendre pour chaque mot.

J'espère que grâce au tableau ma recherche est un peu plus clair.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Si c'est pour éviter ce qui est en post #24, voir PJ.
La liste de mot recherché est dans la liste de mots, et la plage où cherchée est automatique.
VB:
Sub Mettre_0_Cellule_20()
    Effacer
    PL = Range("C1").End(xlDown).Row
    DL = Range("C65500").End(xlUp).Row
    Set Plage = Range(Cells(PL, "C"), Cells(DL, "C"))
    For L = 3 To 7
        Mot = Range("AC" & L)
        If Mot <> "" Then
            For I = PL To DL
                If Cells(I, "C") Like "*" & Mot & "*" Then
                    Cells(I, 23) = 0
                End If
            Next I
        End If
    Next L
End Sub
 

Pièces jointes

  • Classeur3 (1) (2).xlsm
    16.5 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 132
Membres
103 127
dernier inscrit
willwebdesign