[VBA Excel] Macro Recherche de caractères

Anne -  
 Anne -
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
 
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
Anne
 
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
 
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
Anne
 
Merci pour ta réponse et félicitations pour ta philosophie de vie...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
Anne
 
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   Statut Membre Dernière intervention   59
 
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