[VBA Excel] Macro Recherche de caractères
Anne
-
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
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
Merci infiniment par avance à celui ou celle qui pourra m'aider
Anne
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
-
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-
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
-
-
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 :-)
@+ -
Salut,
tu peux utliser des formulesprot 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 donneprot REP1 POS REP2 POS ABCDE DE 4 ABC 1 GHIJKLM HI 2 LM 6
-
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.