[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
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

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