pb d'application d'une macro à toutes les colonnes

S

Steph

Guest
Bonjour à tous,

Voila mon soucis.

J'ai une macro qui fonctionne très bien pour la colonne A. Je n'arrive pas à trouver la formule pour l'appliquer à toutes les colonnes de ma feuille excel.

J'ai notamment des problèmes avec les bouts de code suivants:

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

Range('A2:A90').Select


Comment rendre cette macro générique et non plus seulement applicable à la colonne A?

Vous trouverez mon fichier en pièce jointe.

Merci bien

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

Pièces jointes

  • atgc_20050412170655.zip
    12.7 KB · Affichages: 9

21ch181

XLDnaute Junior
Pour rendre ta macro opéationnelle pour toutes tes colonnes :

remplace val par Cells(x, j) où j est le n° de la colonne.

Il suffit d'initialiser j à 1 et de mettre une boucle for j=1 to dernierecolonne avant ta boucle x et le tour est joué

Cordialement
 

21ch181

XLDnaute Junior
Re-bonjour Steph

Je me suis amusé à trouver une petite optimisation à ton code !
Je te la propose tel quel :

Sub Macro1()
controle = Array('a', 'c', 'g', 't')
Dim compteur(3) As Integer
For i = 2 To 24
For j = 2 To 4
For k = 0 To 3
Cells(1, 6).Formula = '=iserror(find(''' & controle(k) & ''',''' & Cells(i, j) & ''',1))'
'ctrl = Cells(1, 6)
If Not (Cells(1, 6)) Then
compteur(k) = compteur(k) + 1
End If
Next k
Next j
Next i
For k = 0 To 3
x = MsgBox(controle(k) & ' compté : ' & compteur(k) & ' fois', vbOKOnly)
Next k

Cells(1, 6).Clear

endsub()

Cette macro permet sans difficulté d'augmenter le nombre de valeur à tester (k= nbre de valeurs-1, et maj de la variable controle avec les valeurs), le nombre de lignes i et le nombre de colonnes j
l'astuce utilisée étant de 'passer' par l'écriture d'une formule dans la feuille (ici en cellule(1,6)) qui n'st pas utilisée dans les datas et qui sera effacée en fin de traitement (le clear).

Elle est un peu plus courte que tous les elseif et case qui sont complexes à maintenir.

Bonne continuation
 
S

Steph

Guest
Bonjour à tout le monde et à tous les deux en particulier,

Quelle belle journée pour programmer en vba...

Tout d'abord merci pour votre aide, mon code commence à ressembler à quelque chose !

Sylv900 tu avais raison dans mon dernier post pour la méthode à appliquer :
nbcolonne = ActiveSheet.UsedRange.Columns.Count
For j = 1 To nbcolonne
Columns(j).Select

J'ai bien entendu essayer de faire ce que tu avais proposé mais je n'arrivait pas à l'appliquer.

21ch181, c'est vrai que ton code est ultra optimisé, je vais le mettre dans ma procédure.

La boucle fait maintenant office de vraie boucle et parcourt tout mon tableau !!!!

Mon dernier petit soucis vient du remplacement de ce bout de code dans ma nouvelle macro:
Range('A2:A90').Select
J'ai essayé différentes solutions comme
Range(j&2:j&90).Select
(le but est de sélectionner toutes les cellules de la colonne j en cours et de ligne 2 à 90)

Je suis en train de m'y coller, mais si vous avez la solution, n'hésitez pas.

Steph
 

21ch181

XLDnaute Junior
Re bonjour Step and co

Il existe 2 autres petites instructions sympas quand on ne connait pas par avance la taille d'une colonne ou d'une feuille et que j'utilise à 'gogo' dans mes macros :

Instruction 1 :
pour repérer la dernière cellule occupée d'une colonne (attention il faut juste que toutes les cellules occupées soit contigues sinon il faut prendre l'instruction 2)
Selection.End(xlDown).Select ==> est équivalent au 'fin'+flêche bas

Instruction 2 :
permet de repérer la dernière cellule occupée dans une feuille (dernière cellule de la dernière colonne)
ActiveCell.SpecialCells(xlLastCell).Select ==> est équivalent au 'ctrl'+fin au clavier sur le clavier

En combinant cela avec des instructions 'row' et 'column' on repère alors trés (mais alors trés) facilement les compteurs des boucles tel que celle que tu fais !

Voilà. En espérant t'avoir rendu service.

Au fait, je n'avais pas adapté la boucle 'optimisée' au remplacement par des '1' et '2' comme tu l'avais mis dans ta version initiale : mais ca marche aussi bien sur !

Cordialement
 

21ch181

XLDnaute Junior
Heureux que cela te plaise !

En fait pour les adapter à une boucle il suffit de se positionner sur la dernière cellule par l'instruction :
Selection.End(xlDown).Select (que tu places en début de macro)

Là tu mémorise les n° de ligne et de colonne dans 2 variables par :
i=ActiveCell.Row
j=ActiveCell.Column
que tu utilises dans les boucles for next

L'inconvénient de Selection.End(xlDown).Select est qu'il te positionne sur la dernière cellule active t'obligeant à 'revenir' sur la 1ere cellule à traiter !
Ce que tu peux contourner par :
i=Selection.End(xlDown).Row
j=Selection.End(xlDown).Column

Voilà. j'espère que j'ai bien compris ta demande !

Effectivement mon prénom est plus proche de 'Alain' que de 21ch181 !!

Cordialement
 
S

Steph

Guest
Merci à tous les deux pour votre aide et vos conseils.

Ce forum est vraiment génial car les questions y trouvent des réponses rapidement.

Au fait, pour sélectionner les cellules de 2 à 25 de la colonne représentée par la variable j, la formule est la suivante:
Range(Cells(2, j), Cells(25, j)).Select

A+

Steph
 
J

jibeem

Guest
Re:pb d'application d'une macro à toutes les colon

sylv900 écrit:
si ton truc ne marche pas essaye :
Range(j & '2:' & j & '25').Select
ca devrait le faire
Bonjour,

J'essaye d'appliquer cette formule pour sélectionner des colonnes les unes après les autres mais ça me donne ceci comme erreur. Comprenez-vous pourquoi ça plante ?

Run time error '1004':

Method 'Range' of object '_Global' failed

Merci pour votre aide,

Jean-Baptiste
 
J

jibeem

Guest
Re:pb d'application d'une macro à toutes les colon

Steph écrit:
Au fait, pour sélectionner les cellules de 2 à 25 de la colonne représentée par la variable j, la formule est la suivante:
Range(Cells(2, j), Cells(25, j)).Select
Bon, finalement, si j'avais pas sauté ce post, j'aurais trouvé la bonne réponse... sylv900, il faudrait que tu vérifies que ce que tu proposes fonctionne bien car chez moi, ça ne veut pas marcher.

Jean-Baptiste
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 843
Messages
2 092 755
Membres
105 523
dernier inscrit
mouki62530