× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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 !


Les bons plans du moment PC Astuces

Tous les Bons Plans
7,99 €Hub 4 ports USB 3.0 Sabrent avec commutateurs à 7,99 €
Valable jusqu'au 24 Novembre

Amazon fait une promotion sur le Hub 4 ports USB 3.0 Sabrent à 7,99 €. On le trouve ailleurs autour de 14 €. 4 commutateurs lumineux vous permettront d'activer ou non chaque port USB 3.0.


> Voir l'offre
217,57 €NAS Synology DS218 à 217,57 € avec le code SYNO218
Valable jusqu'au 26 Novembre

LDLC fait une promotion sur le NAS Synology DS218 qui passe à 217,57 € avec le code promo SYNO218 alors qu'on le trouve ailleurs à partir de 250 €.  Gérez votre bibliothèque multimédia avec le serveur NAS Synology DiskStation DS218. Ce modèle 2 baies sera capable d'effectuer le transcodage en temps réel des contenus source 4K Ultra HD. Il est doté d'un processeur Realtek Quad-Core avec une mémoire de 2 Go RAM DDR4. Disposez de deux ports USB 3.0, d'un port Gigabit Ethernet, d'un système de stockage avec fichier ext4 et d'une solution efficace de synchronisation et de sauvegarde. 


> Voir l'offre
56,23 €SSD Samsung 860 EVO 500 Go à 56,23 € livré
Valable jusqu'au 25 Novembre

Amazon Allemagne fait une promotion sur le SSD Samsung 860 EVO 500 Go qui passe à 51,62 €. Comptez 4,61 € pour la livraison en France soit un total de 56,23 € livré alors qu'on le trouve ailleurs à partir de 70 €. Ce SSD offre des vitesses de 560 Mo/s en lecture et 520 Mo/s en écriture. Il est garanti 5 ans. Une bonne affaire.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre

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