Se connecter avec
S'enregistrer | Connectez-vous

Plage de recherche variable dans macro VBA

Dernière réponse : dans Programmation

Tout d'abord, Bonjour à tous ceux qui passeront sur ce fil ! :hello: 

Je coince sérieusement sur une partie de ma macro... :sweat:  :( 


J'ai 3 colonnes A, B et C
Ligne 1 les titres
Ligne 2 à N(N variable définie au début de ma macro) :
-Colonne A, des temps en seconde.
-Colonne B, des temps en seconde, qui sont initialement rangés par ordre croissant, MAIS quand la macro travaille ils ne sont plus rangés de la sorte.
-Colonne C, des entiers positifs

Ce que je voudrais faire, c'est définir un plage de cellule qui serait ma plage de recherche initiale ( toute la colonne B de la ligne 2 à N)

Ensuite faire une boucle de i=2 jusqu'à N qui :
Va chercher la plus petite des valeurs des cellules comprises dans la plage de recherche ET entre cellule(2,"B") et cellule (i,-1,"B")(Intersection), par exemple cellule (j,"B")

Si la valeur de la cellule (i,"A") est > à la valeur de la cellule (j,"B"), alors la valeur de la cellule (i,"C") prend la valeur de la cellule (j,"C") ET la cellule (j,"B") est éliminée de la plage de recherche. C'est à dire qu'au i suivant, elle ne sera pas prise en compte lors de la recherche de la plus petite des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.

Dans l'idée, je voudrais faire quelque chose du genre :
maplage=Range(Cells(2,"B"),Cells(N,"B"))
Et dans la boucle, redéfinir maplage à chaque fois que nécessaire
maplage= maplage - Range (Cells(j,"B")
Il n'est apparemment pas possible de faire de telles opérations sur les Range, mais si quelqu'un a une idée je suis preneur ! :bounce: 

Merci.

CampaSC
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Salut CampaSC,

tout d'abord publie un début de code sur le forum
(attention a la publication et l'utilisation des bonnes balises cf Règlement)

Ensuite pour te "balader" dans une plage regarde du côté de la fonction .Offset()

Pour ton problème pourquoi ne pas tout simplement supprimer le contenu de la cellule initiale ?
si cela non plus ne te convient pas alors fait une copie de ta feuille initiale (au sein de la macro) et travaille sur cette copie. Puis tu la détruit à la fin de l’exécution de ta macro.

EN espérant que cela puisse t'aider.

A te lire.

oozenot a dit :
Salut CampaSC,

tout d'abord publie un début de code sur le forum
(attention a la publication et l'utilisation des bonnes balises cf Règlement)

Ensuite pour te "balader" dans une plage regarde du côté de la fonction .Offset()

Pour ton problème pourquoi ne pas tout simplement supprimer le contenu de la cellule initiale ?
si cela non plus ne te convient pas alors fait une copie de ta feuille initiale (au sein de la macro) et travaille sur cette copie. Puis tu la détruit à la fin de l’exécution de ta macro.

EN espérant que cela puisse t'aider.

A te lire.


Bonjour Oozenot,

Problème résolu, merci d'avoir laisser ton avis quand même. Le problème c'est que je ne pouvais justement pas supprimer le contenu des cellules car elles servaient à calculer d'autres cellules.
Finalement, à chaque fois que j'utilise je la colorie en gris, et ma plage de recherche ne contient que les cellules sans remplissage.9a fonctionne.

CampaSC
Lassé par la pub ? Créez un compte