Rechercher cellules qui contiennent

Résolu/Fermé
Jimmy59116 Messages postés 45 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 30 janvier 2013 - 26 juin 2012 à 18:20
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 27 juin 2012 à 19:48
Bonjour,

Je me bats depuis un moment avec un problème apparemment simple...

Dans une feuille, je recherche les cellules contenant une partie de texte.

Le but du jeu : effacer ce qui est dans la cellule en dessous.

Le test qui n'a pas marché :

sub conges()

Dim Cell As Range
Range("A1:P200").select

For Each Cell In Selection
If Cell.Value Like "Conge" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.ClearContents
End If
Next

End Sub

Il sélectionne les cellules de ma feuille (ce qui me fait plaisir), mais il ne fait rien...

Pour la petite histoire, je travaille sur un planning mal foutu... Les congés sont notés avec trop de détails (ex : "A1" = Conges payes / "A2" = Accordés par...). Je voudrais supprimer les infos inutiles.

La difficulté : il y a différents types de congés, donc la recherche par mot est partielle.

J'ai essayé avec des fonctions find, mais là non plus, je n'ai pas réussi.

Mon ami google et les différents forums ne m'ont pas éclairés, à moins que ça soit moi qui ne saches plus lire correctement...

D'avance, merci pour votre aide !

Jimmy



3 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
26 juin 2012 à 22:47
Sub conges()

Dim Cell As Variant


For Each Cell In Range("A1:c200")
Cell.Select
x = InStr(1, Cell.Value, "conge")
    If InStr(1, Cell.Value, "conge") > 0 Then
        Cell.Offset(1, 0).Select
        Selection.ClearContents
    End If
Next

End Sub



je te propose de faire comme ça .
Attention si tu supprimes une cellule il vaut mieux ne pas utiliser for each.
0
Jimmy59116 Messages postés 45 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 30 janvier 2013 1
27 juin 2012 à 12:03
Bonjour, je te remercie pour ta proposition. J'ai testé : la sélection se fait, mais pas la suppression. En testant le code en mode arrêt, je vois qu'il ne trouve pas de cellule répondant à la condition. En effet, l'expression "Conge" est toujours accompagnée (ex : congés payés, congés familiaux...). Comment peut-on dire que "Conge" n'est qu'une partie de l'expression ?
Merci pour ton aide.
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
27 juin 2012 à 14:15
J'avais écrit "conge" pas d'accent et pas de majuscule
attention!
la donnée du dessous sera effacée mais la cellule ne sera pas supprimée.


Sub conges()

Dim Cell As Variant
Dim maRecherche as String
maRecherche="Conge"     ' ici tu modifies ta recherche
For Each Cell In Range("A1:c200")
Cell.Select
x = InStr(1, Cell.Value, maRecherche") ' ça :c'est pour te montrer
    If InStr(1, Cell.Value, maRecherche) > 0 Then
        Cell.Offset(1, 0).Select
        Selection.ClearContents
    End If
Next

End Sub
0
Jimmy59116 Messages postés 45 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 30 janvier 2013 1
27 juin 2012 à 16:47
OK, ça fonctionne impeccable. Y'a juste un truc qui m'embête... je n'ai pas tout compris. A ce que j'ai lu, les fonctions InStr servent à compter le nombre de fois que revient un caractère dans un mot...
L'essentiel est que ça fonctionne, mais tu viens de m'ouvrir là une nouvelle piste d'apprentissage.
Merci pour ton aide !
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
27 juin 2012 à 19:48
instr te renvoie la position d'une chaine de caractère dans une chaine.
x=instr(1,"conge","mes conges") renvoie 5 car le c est le cinquième caractère
en mettant if instr(......)>0 then ....s'il renvoie une position la chaine existe si =0 la chaine n'existe pas.
Cqfd

Bonne soirée
0