Comptage ds colonnes et changement de valeurs

  • Initiateur de la discussion Initiateur de la discussion Steph
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

Steph

Guest
Bonjour,

voici mon petit problème :

J'ai une série de colonnes sur ma feuille excel contenant des doublets de caractères a, g, c, t ou des 0. (voir ficheir joint) Exemple dans la première colonne

ag
gg
ag
gg
ga
ga
0
aa
gg
etc...


J'aimerais créer une macro permettant de compter chaque caractère dans colonne (ex:23 'a' et 19 'g' dans la colonne A) et de remplacer la valeur la plus présente (ici, a) par 1 et la seconde (ici, g) par 2 et virer les 0.

Voici un fichier exemple, avec en feuille 1 le tableau initial et en feuille 2 le tableau auquel j'aimerais arriver.

Merci pour votre aide

Steph [file name=atgc.zip size=2694]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/atgc.zip[/file]
 

Pièces jointes

je n'ai pas le temps de tout de programmer mais voici des élément :
_fait une boucle for de 1 à nbligne (nbligne=ActiveSheet.UsedRange.Rows.Count) permettant de lire chaque cellule.
_dans cette boucle utilise des boucle if then pour identifier les termes (a, g, c, t ou 0)
_pour chaque termes incrémente (ex : if Mid(range('A' & i), 1, 1)=a then x=x+1 endif)
_enfin affiche dans des msgbox les résultats de tes incrémentations (ici 'x') pour vérifier le comptage)
_pour remplacer tes lettres par des valeurs reprend une boucle de 1 à ligne


je sais c'est rapide mais si tu as des questions tu est le bienvenu...
 
Merci pour tes conseils.
Voici un bout de code que j'ai développé suivant ton algo mais qui fonctionne pas génial. Si quelqu'un a une idée...

Merci
Steph 🙂 [file name=atgc_20050412112414.zip size=11096]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/atgc_20050412112414.zip[/file]
 

Pièces jointes

remplace tout le début de ton code par ça :
Sub essai()

Dim a, t, g, c, x As Integer
Dim col As Byte
Dim val As String
nbligne = ActiveSheet.UsedRange.Rows.Count

Columns('A:A').Select
For x = 1 To nbligne
a = t = g = c = 0
'incrémentation des variables
val = Range('A' & x)
If val = 'aa' Then
a = a + 2
ElseIf val = 'tt' Then
t = t + 2
ElseIf val = 'gg' Then
g = g + 2
ElseIf val = 'cc' Then
c = c + 2
ElseIf val = 'at' Or val = 'ta' Then
a = a + 1 And t = t + 1
ElseIf val = 'ag' Or val = 'ga' Then
a = a + 1 And g = g + 1
ElseIf val = 'ac' Or val = 'ca' Then
a = a + 1 And c = c + 1
ElseIf val = 'tg' Or val = 'gt' Then
t = t + 1 And g = g + 1
ElseIf val = 'tc' Or val = 'ct' Then
t = t + 1 And c = c + 1
ElseIf val = 'gc' Or val = 'cg' Then
g = g + 1 And c = c + 1
ElseIf val = '0' Or val = 'ct' Then
Range('A' & x) = ' '
End If
Next


'affichage du resultat et remplacement


normalement ca marche tu verras
sylvain
 
Merci bien pour ton aide.

Si j'utilise le code que tu m'as donné (que j'ai très légèrement modifié), cela fonctionne presque maintenat si l'on enlève l'initialisation des a t g c. Presque car la macro ne bugge pas mais me trouve 2 t et 18 c alors qu'il y en a 17 et 29... je ne sais pas du tout d'où ca peut provenir. Si on laisse l'initialisation à 0, pas de bug mais aucune msgbox.

Sub essai()

Dim a, t, g, c, x As Integer
Dim col As Byte
Dim val As String
nbligne = ActiveSheet.UsedRange.Rows.Count

Columns('A:A').Select
For x = 1 To nbligne
' a = t = g = c = 0
'incrémentation des variables
val = Range('A' & x)
If val = 'aa' Then
a = a + 2
ElseIf val = 'tt' Then
t = t + 2
ElseIf val = 'gg' Then
g = g + 2
etc...

Je vais partir en pause pour déjeuner et serai de retour vers 14h, si tu as une idée de l'origine de ce mauvais comptage, n'hésite pas.

Merci encore

Steph
 
Rebonjour,

C'est bon, tout fonctionne pour la première colonne. Sylv900 merci pour ton aide

La question est donc maintenant de savoir comment on fait cette opération en changeant de colonne jusqu'à la dernière.

Je suppose qu'il faut faire une boucle while du style

Dim col as byte
While isempty(col & 1) = false
...
wend

mais ceci ne fonctionne pas.

Comment initialiser col à la première colonne sur la gauche?
Quelle est la formulation pour une telle boucle?


Merci

Steph
 
J'ai essayé et sur le principe ta boucle est bonne.
Seulement, je ne sais pas comment remplacer les 'A' désignat la première colonne par les j.
Par exemple dans les expressions :

For x = 1 To 90
val = Range('A' & x)
If val = 'aa' Then
a = a + 2
ElseIf etc...

ou encore dans

MsgBox 'Le nombre de g dans cette colonne est:' & g
If g >= c Then
Range('A2:A90').Select
Selection.Replace What:='g', Replacement:='1', LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:='c', Replacement:='2', LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Else: Range('A2:A90').Select


As tu une idée?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
40
Affichages
3 K
Retour