Petit complément à la solution de Bbil
Code:unite = Split(sh.Cells(i, icSEUILS).MergeArea.Cells(1, 1).Value, " ")(1)
Version imprimable
Petit complément à la solution de Bbil
Code:unite = Split(sh.Cells(i, icSEUILS).MergeArea.Cells(1, 1).Value, " ")(1)
En effet, la fonction split est plus pratique dans ce cas-là. :) Merci !
Dans la grande majorité des cas, un espace sépare la valeur de l'unité. Sauf quelques rares cas, dans lesquels on a la valeur, suivie du début de l'unité, d'un espace, de la suite de l'unité, d'un espace, puis de la fin de l'unité. :cry:
Croyez-vous cela gérable dans le même code que le reste, ou faut-il traiter ces cas à part ?
@ jfontaine: j'avais déjà écrit ceci
Le .Value que tu as rajouté change-t-il quelque chose ? Car la ligne ci-dessus paraît fonctionner, en prenant bien entendu unite(1) pour récupérer l'unité.Code:unite = Split(sh.Cells(i, icSEUILS).MergeArea.Cells(1, 1), " ")
le code
nécessite que ta variable unité soit de type tableau alors que dans mon exemple, unite est une variable simple. Tu pourrais aussi utiliser le code directement dans une msgbox par exemple ou pour alimenter une autre cellule (dans le cas d'une dissociation des montants et des unités)Code:unite = Split(sh.Cells(i, icSEUILS).MergeArea.Cells(1, 1), " ")
.Value est l'instruction par défaut d'un Range. Mais j'ai pour habitude de toujours spécifier le .value ce qui évite dans certains cas d'avoir l'objet qui se balade en lieu et place de la valeurCode:Msgbox Split(sh.Cells(i, icSEUILS).MergeArea.Cells(1, 1).Value, " ")(1)
pour le cas ou plusieurs espaces
Code:
1
2
3
4
5
6
7
8
9
10 Dim tb Dim stUnite as string Dim i as integer tb = Split(stVal , " ") stUnite = tb(1) For i = 2 to ubound(tb) stUnite = stUnite & " " & tb(i) next msg box "unité : " & stUnite
Merci bbil ! ;)
Bon, finalement, même si l'ensemble du code est très lourd, ce que je souhaitais semble fonctionner. En fait, comme je l'avais précisé au départ, mon classeur comporte plusieurs pages, mais les données étant organisées de façon tellement différentes d'une feuille à l'autre (et parfois au sein d'une même feuille..), dans le sens où sur une feuille les seuils par exemple vont être en colonne B, alors que sur la suivante ils seront sur la C, mais que sur les 4 premières lignes, etc.. :aie: , j'ai finalement fait un algo pour chaque feuille, alors que je pensais au départ faire une boucle For pour traiter l'ensemble des pages.
Maintenant que j'y vois un peu plus clair, je pensais même "améliorer" un peu cette analyse de données, mais je suis pas sûr que ce soit facilement faisable, du moins à mon niveau. En clair, au moment de l'affichage de la msgbox résumant l'ensemble des dépassements (s'ils ont lieu), je pensais plutôt afficher à l'utilisateur une première fenêtre indiquant l'ensemble des feuilles (en donnant leur titre par exemple, que ce soit explicite) dans lesquelles apparaissent les éventuels dépassements rencontrés. A partir de là, l'utilisateur aurait alors le choix de sélectionner l'une des feuilles (s'il y en a plusieurs), et une nouvelle fenêtre s'ouvrirait affichant uniquement les dépassements de la feuille choisie, en suivant la même mise en forme que celle que l'on a vue jusque là.
Dans le cas où aucun dépassement n'aurait eu lieu, on garderait le même msgbox que celle vue jusqu'alors.
Après quelques petites recherches, il me semble qu'il faudrait pour faire ceci se pencher sur une userform du genre combobox. J'ai lu le guide présent sur le site, mais j'avoue ne pas m'en tirer... Si cela ne demande pas trop de temps, pourriez-vous me montrer svp ? Après, peut-être penserai-vous mon idée peu utile, ou en aurez-vous des meilleures. Je reste ouvert à toute suggestion !
P.S.: je parlais de boucle For plus haut, est-il possible d'en faire une sur des indices particuliers ? Par exemple, For i appartient à {1,3,4,7}... ? Sinon, existe-t-il une autre structure pour cela ?
Edit: je réponds moi-même à mon P.S., je pense qu'il s'agit de la boucle For Each Next.