[VBA Excel] Macro Recherche de caractères

Fermé
Anne - 9 août 2007 à 10:43
 Anne - 9 août 2007 à 17:12
Bonjour aux pros de l'info!

J'ai déjà envoyé un message hier et les réponses m'ont entièrement satisfaite. Donc je retente une question à des âmes charitables qui auraient pitié d'une pauvre néophyte...

J'ai un tableau Excel du genre
protéines         peptides
ABCDEF             DE
GHIJKLAB           ABC
...                IJ
...                ....


Pour chaque protéine, je voudrais savoir si elle contient un ou plusieurs peptide de la liste, lequel et la position du premier caractère, c'est à dire une réponse du genre
protéines       Réponse1      Position        Réponse2      Position     ....
ABCDEF          DE            4               ABC           1            ....
GHIJKLAB        IJ            3
...                     ...
...                     ....


Merci infiniment par avance à celui ou celle qui pourra m'aider

Anne
A voir également:

4 réponses

Utilisateur anonyme
9 août 2007 à 13:59
Bonjour,

Suggestion :

Option Explicit

Sub ChercheReptides()

    Dim PlageP As Range, PlageR As Range
    Dim Cellule As Range, Boite As Range
    Dim Position As Long, Adresse As Long
    
    Set PlageP = Range("A2:A" & Range("A2:A65536").End(xlDown).Row)
    Set PlageR = Range("B2:B" & Range("B2:B65536").End(xlDown).Row)
    
    Adresse = 3
    For Each Cellule In PlageP
        For Each Boite In PlageR
            Position = InStr(1, Cellule.Value, Boite.Value, vbTextCompare)
            If (Position > 0) Then
                Cellule.Offset(0, Adresse).Value = Boite.Value
                Cellule.Offset(0, Adresse + 1).Value = Position
                Adresse = (Adresse + 2)
            End If
        Next Boite
    Next Cellule
    
End Sub
'

Lupin
1
Merci infiniment
C'est super, j'ai juste rajouté Adresse=3 après Next boite pour qu'il revienne au même endroit à chaque protéine.
C'est vraiment incroyable ce système de forum. Je suis impressionnée par votre rapidité et votre gentillesse. ça vous amuse ? ça vous détend ? vous aimez rendre service ? Quelle que soit votre motivation, bravo !

En tout cas Merci encore à papou93 pour hier et aujourd'hui (j'ai choisi la solution de facilité avec Lupin) et Merci encore à Lupin pour sa macro qui répond exactement à mes attentes...

A bientôt peut être !

Anne
0
Utilisateur anonyme
9 août 2007 à 14:47
re :

La connaissance croit avec le partage comme le dit si bien M. Jean-Claude Bellamy qui m'a beaucoup
appris sans me connaître. Bien que peut répendu, je pense que nous sommes ici pour servir et non
pour être servi. Donner sans attente est pour ma part une marque de sagesse.

Ce fut un plaisir comme toujours.

Arsène Lupin
Gentleman (non cambrioleur)
Pour vour servir :-)

@+
1
Merci pour ta réponse et félicitations pour ta philosophie de vie...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
9 août 2007 à 10:59
Salut,

tu peux utliser des formules
prot	REP1	POS	                REP2	POS
ABCDE	DE	=CHERCHE(B2;A2;1)	ABC	=CHERCHE(D2;A2;1)
GHIJKLM	HI	=CHERCHE(B3;A3;1)	LM	=CHERCHE(D3;A3;1)


ce qui donne
prot	REP1	POS	REP2	POS
ABCDE	DE	4	ABC	1
GHIJKLM	HI	2	LM	6
0
Merci Lami20j mais j'ai 3000 entrées pour protéines et 6000 pour peptides alors j'aimerai une macro pour ne voir apparaître que les hits qui ont fonctionné...

ya pas un roi de la macro par là ?
0
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 59
9 août 2007 à 13:50
Bonjour Anne, Il te faut utliser la fonction de recherche 'Instr' :

En considérant la réponse 1 en colonne2, la position en colonne 3, la réponse en colonne 4, la position en colonne 5, ...

ActiveCell= InStr(Range("a" & ActiveCell.Row).Value, ActiveCell.Offset(0, -1).Value)


Il te sera facile d'adapter les n° de colonnes dans l'instruction 'Offset(Ligne, Colonne)' en fonction de tes besoins.
Pour essai, j'ai saisi cette ligne dans l'événement 'SelectionChange' de la feuille de calcul, avec pour condition que la cellule sélectionnée est bien dans les colonnes 3 ou 5.
Il est facile d'automatiser la procédure dans une boucle de balayage d'un zone précise.

Cordialement.
0