excel 2003: recherche suite de ligne par sélection

timmi88

XLDnaute Nouveau
Bonjour,

Voila, je me suis mis à la programmation VB depuis peu et il y a une automatisation que je n'arrive pas à réaliser:
le document sur lequel je voudrais appliquer le code est une base de donnee excel contenant un très grand nombre d'information.

Chaque ligne de mon programme représente une opération à réaliser, et ce que j'aimerai faire, c'est créer une macro me permettant d'identifier une suite d'opérations, et surtout, me permettant d'identifier combien de fois cette suite d'opération est réalisée (de plus si on pouvait changer la couleur des lignes de cette suite, ce serait parfait)
voici un exemple du type de code que j'ai déjà créé

Code :

Sub
'i nombre de ligne
'j nombre de colonne
While i<5000
if( _
Cells(i,j)="percer" and _
Cells(i+1,j)="poser une vis" _
) Then
Rows(i:i+1).Interior.ColorIndex = 4
i=i+1
Endif
wend
Endsub

(ceci n'est qu'un exemple)

Note: a savoir que toutes mes suites commencent par une même opération "préparation" et finissent par "nettoyage"

Mon problème:
aujourd'hui, je dois aller (pour X suites d'opérations différentes à identifier) dans mon programme et changer de façon manuel les valeurs des X opérations qui changent d'une suite à une autre
ce qui est très fastidieux et me prend un temps fou

j'aimerai savoir si il était possible de procéder de la sorte:

je n'ai qu'a sélectionner dans mon excel la suite d'opération (ie sélectionner les X lignes), lancer mon programme et il fera tout seul une recherche de cette suite dans tout mon document et me mettra en gris les résultats


si quelqu'un pouvait m'aider ce serait super.....

merci d'avance
 

Odesta

XLDnaute Impliqué
Re : excel 2003: recherche suite de ligne par sélection

Bonjour

C'est réalisable, mais les gammes ont-elles des nombres d'action différentes ?
Si oui, cela complique un peu.

Dans tous les cas, il va falloir comparer les cellules non plus à des valeurs fixes, mais vous vous ne doutez, à des valeurs variables.

Pour récupérer ces valeurs, vous voulez sélectionner une zone, qui les contiendrait :
Nous pouvons remplir un tableau contenant cette zone :
dim tableau_valeur as variant
tableau_valeur = Selection.Value

Le tableau obtenu comportera les valeurs choisies, il ne vous reste que le plus dure à faire : trouver l'algo qui permette de comparer le contenu du tableau avec vos 5000 lignes.
je préconise de partir sur un code du genre :

=> pour chaqu'une des 5000 lignes (for ligne = 1 to 5000 / next)
remettre i à 1
=> vérifier si la valeur tableau_valeur(1,i) existe
=> si non, passer à la ligne suivante. et remettre i à 1
=> si oui, faire i+1, et vérifier avec la colonne suivante (boucle)
=> si oui et ubound(tableau_valeur,2) alors on a notre séquence => mettre en gris
ubound(tableau_valeur,2) '(commande pour obtenir la taille max d'un tableau dans sa dimension n (ici 2))

est-ce suffisamment clair ? sinon, je peux détailer plus


Cordialement
Olivier
 

timmi88

XLDnaute Nouveau
Re : excel 2003: recherche suite de ligne par sélection

Bonjour
Olivier

tout d'abord, merci
tes conseils m'ont été précieux

j'ai réussi a faire ce que je voulais!!!

en revanche j'aurais aimé savoir si tu pouvais me conseiller ou m'aider sur encore une ou deux petites choses s'il te plait

1)voila, j'aimerai obtenir la taille (ie le nombre de ligne) de ma sélection mais je ne sais pas comment faire...
exemple, si je sélectionne 12 lignes, j'aurais 12

2) serait il possible de relever pour chaque suite d'opération sélectionnée les quatre premières lettres de chaque opération et les rentrer dans une cellule en les séparant par une virgule...

ex:
percer
clouer
visser
préparer la peinture
donnerait -----> perc,clou,viss,prep

3) si la programmation précédente est faisable, peut on corser le tout en essayant de ranger les opérations par ordre alphabétique?

donnerait pour l'exemple ci dessus clou,perc,prep,viss


merci encore pour ton aide d'aujourd'hui et pour ta rapidité
 

Odesta

XLDnaute Impliqué
Re : excel 2003: recherche suite de ligne par sélection

Bonjour

1) Avec la méthode que je t'ai montré, tu peux donc reprendre tableau_valeur et chercher la taille sur la dimension 1 ( ubound(tableau_valeur,1) )
l'autre méthode, plus propre c'est : Selection.Rows.Count

2) une fois le tableau réalisé avec les noms 'longs', il faut siot le modifier pour avoir les noms cours, soit en faire un autre. je préconise d'en réaliser un autre
dim tableau_valeur_cours as variant
tableau_valeur_cours = tableau_valeur
une fois cela fait, raccourcir dans le nouveau tableau :
for i = 1 to ubound(tableau_valeur_cours,1) (1 ou 2 suivant que les données soient en ligne ou en colonne
tableau_valeur_cours(1,i) = LEFT(tableau_valeur_cours(1,i) , 4 ) (ou i,1 )

3) plus qu'à faire un simple trie :
il existe foule d'algo la dessus, mais c'est tout de même plus sympa de ce le faire soit même :

il faut utiliser une boucle :
while condition
[....]
when

des conditions : if condition then [....] end
des comparaisons : tableau_valeur_cours(1,i) > tableau_valeur_cours(1,i+1)

sans oublier de revenir à i = 1 dès qu'une valeur est modifié

Si tu sèches trop à réaliser le trie, soit retrouve la réponse sur le forum, soit dis-le moi, et je t'aiderai.

Bon courage
 

timmi88

XLDnaute Nouveau
Re : excel 2003: recherche suite de ligne par sélection

Merci, j'ai bien avancé
étant donné que je coinçait vraiment sur le sujet, j'ai aussi demandé sur un autre topic

(je sais, je pollue, désolé)

et du coup à l'aide de vos réponse, j'ai réussi à le faire

un petit pas pour la programmation, un grand pas pour moi

^^

amicalement
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 094
Membres
104 029
dernier inscrit
Neozz14