> Tous les forums > Forum Bureautique
 position dans un array, mais en partant de la finSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Boogie Palace
  Posté le 08/09/2014 @ 11:24 
Aller en bas de la page 
Petit astucien

bonjour le forum,

dans une procédure VBA (Excel 2010), pour trouver la position de "zzz" dans "Ma_liste", je procède ainsi :
(disons que nous sommes en option base 1, ça simplifie)

Ma_liste = Array("A", "B", "zzz", "C", "D", "zzz")
Position_zzz = Application.Match("zzz", Ma_liste, 0)

le résultat est 3, puisqu'il prend le 1er trouvé.
ma question : comment trouver la position du 1er "zzz" en partant de la fin ? (donc résultat attendu = 6)

si une telle commande n'existe pas, je me disais qu'une solution alternative serait d'inverser l'array avant d'utiliser ma fonction Match habituelle, et avec un simple calcul je retomberais sur 6 ; mais là non plus j'ai pas trouvé une commande "reverse" magique.

vos idées sont les bienvenues (aussi bien pour la recherche en partant de la fin que pour le reverse d'un array, les deux m'intéressent)

BP

edit : pour inverser l'array, je viens de penser à une boucle toute bête, ça répond déjà à ma 2e question ; il reste la recherche en partant de la fin.



Modifié par Boogie Palace le 08/09/2014 11:31
Publicité
ferrand
 Posté le 08/09/2014 à 11:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

En faisant :

For i = LBound(Ma_liste) To UBound(Ma_liste)
If Ma_liste(i) = "zzz" Then n = i
Next i

la valeur cherchée sera affectée à n...

Eventuellement, le correctif n + 1 - LBound(Ma_liste) renverra le bon résultat quelle que soit l'option Base.

Boogie Palace
 Posté le 08/09/2014 à 12:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

merci Anonyme et ferrand, vos deux méthodes fonctionnent et me conviennent.
visiblement, on est forcé de passer par une boucle, mais ça va, ça reste court comme syntaxe.

bien vu ferrand le correctif qui permet de ne pas se soucier de l'option base, ça me sera utile pour bien d'autres cas.

ferrand
 Posté le 08/09/2014 à 12:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Complément (pour plus tard !?) : inverser le tableau, je crois que tu ne ne peux pas faire l'économie d'une boucle.

Avec une variable String :

For i = LBound(Ma_liste) To UBound(Ma_liste)
chaine = Ma_liste(i) & " " & chaine
Next i
Ma_liste = Split(Trim(chaine))

Boogie Palace
 Posté le 09/09/2014 à 10:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

merci ferrand pour ce complément astucieux.

ferrand
 Posté le 10/09/2014 à 13:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Anonyme a écrit :

Salut

Initialise quand même la chaîne à "" au départ

Anonyme

Anonyme

C'est en principe inutile pour une variable déclarée de type String, qui renverra une valeur automatiquement initialisée à "" (chaîne vide) en première utilisation.

Mais ce peut être une sage précaution si variable de type Variant utilisée dans un contexte susceptible de permettre à VBA-Excel une autre interprétation...

Salut jphil

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Polices installées, mais introuvables dans Word...
Dans Word mais pas dans Outlook? pourquoi?
Vrai correctif mais faux calculs dans Excel 2003
un organigramme dans excel !!! mais où?
Copier/coller réticent dans Word 2003
VBA EXCEL mettre procédures dans un seul module
Augmenter la taille des fichiers joints dans Outlook 2010
Mettre une barre sur lettre dans WORD
Poser un taquet au milieu d'une phrase dans word
regrouper feuilles dans une feuille
Plus de sujets relatifs à position dans un array, mais en partant de la fin
 > Tous les forums > Forum Bureautique