Lecture inverse d'un tableau

Bonjour

j'ai ecris le code suivant qui permet la lecture inverse d'un tableau en type array :

option base 1
Sub lecture_inverse_tableau()
t = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
pos = InputBox("choisir une valeur dans le tableau")

n = 0
  For i = 1 To UBound(t)
   If t(i) = Val(pos) Then
    Do
     If 9 * n + i < 0 Then
        Do
        n = n + 1
        Loop Until 9 * n > i
      End If

     z = z & " " & t((9 * n + i) Mod 9)
     i = i - 1

      Loop Until n = 10
       Exit For
   End If

  Next

  MsgBox z
End Sub

ca marche tres bien mais il y a t il un moyen de faire plus court ? ..il y a peut etre un truc tout bête à quoi j'ai pas pensé ....

le but etant de se placer sur n'importe quelle valeur et proceder au decompte , exemple si je me place sur 4 je devrais obtenir :

4 3 2 1 9 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 2 1 9 8 7 6 ....ect

Merci pour vos suggestions

Bonjour

For i = UBound(t) to 1 step -1

ca marche tres bien mais [...]

Merci pour vos suggestions

Suggestion : poste un code qui fonctionne mieux (que très bien !), i.e. sans erreur d’exécution "9".

Patrice 33740 mon code marche tres bien , testé à l'instant à nouveau et je n'ai aucun message d'erreur et j’obtiens bien la suite de chiffres attendue dans la variable z .

78Chris merci , j'y avais pensé mais cette suggestions

Bonjour,

Je confirme le propos de Patrice33740.

Erreur d'exécution 9 lors de l'exécution de la procédure.

Cdlt.

ah !! mais je vous confirme a tous ne pas avoir avoir d'erreur , le revoici

Option Base 1
Sub lecture_inverse_tableau()
t = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
pos = InputBox("choisir une valeur dans le tableau")

n = 0
  For i = 1 To UBound(t)
   If t(i) = Val(pos) Then
    Do
     If 9 * n + i < 0 Then
        Do
        n = n + 1
        Loop Until 9 * n > i
      End If

     z = z & " " & t((9 * n + i) Mod 9)
     i = i - 1

      Loop Until n = 10
       Exit For
   End If

  Next

  MsgBox z
End Sub

Il y a toujours l'erreur, par exemple quand je choisis 2

J'aurais utilisé :

Option Base 1
Sub lecture_inverse_tableau()
  t = Array("a", 1, "b", 2, "c", 3, "d", 4, "e", 5, "f", 6)
  pos = InputBox("Choisir une valeur dans le tableau :" & vbCrLf & Join(t, ", "))
  i = (InStr(1, Join(t, ",") & ",", pos & ",") + 1) / 2
  If i <> Int(i) Then Exit Sub
  Do
    Z = Z & " " & t(i)
    i = i - 1: If i = 0 Then i = UBound(t)
  Loop Until i = InStr(1, Join(t, ""), pos)
  MsgBox Z
End Sub

Salut rocket4

Je confirme le propos de Patrice33740

Erreur d'exécution 9 lors de l'exécution de la procédure.

Voici deux propositions, une fonctionne Quelle que soit la taille de nombre ou la lettre (1, f, 23, az,…) :

Sub test()
t = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
pos = InputBox("choisir une valeur dans le tableau")
For i = 1 To UBound(t)
   If t(i) = Val(pos) Then
   For j = i To 1 Step -1
       Z = Z & t(j)
   Next
   For m = UBound(t) To i + 1 Step -1
       Z = Z & t(m)
   Next
   End If
 Next
 MsgBox Z
End Sub

, et la deuxième fonctionne seulement si la taille est égale un caractère:

Sub test2()
t = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
pos = InputBox("choisir une valeur dans le tableau")
 i = WorksheetFunction.Match(pos, t, 0)
 tmps = Mid(Join(t, ""), 1, i)
 Z = StrReverse(tmps)
 tmps = Mid(Join(t, ""), i + 1, UBound(t))
 Z = Z & StrReverse(tmps)
 MsgBox Z
End Sub

A moins que vous avez un autre intérêt pour développer ton code de telle façon !?

Merci à tous pour vos interventions, ne comprennent toutefois pas l origine de l erreur que vous rencontrez de mon côté aucune erreur si je teste avec 2, la variable z retourne 21987654321 987654321 987654321.. Ect

Bonjour rocket4, le forum,

je te propose ce fichier Excel :

12exo-rocket4.xlsm (13.50 Ko)

fais Ctrl e, puis saisis une valeur de 1 à 9 ; clic sur OK


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

@rocket4

mon fichier précédent était pour un tableau de seulement 9 valeurs, de 1 à 9.

pour un tableau d'un nombre quelconque de valeurs (ici 16 valeurs, de 1 à 16) :

13exo-rocket4.xlsm (13.82 Ko)

fais Ctrl e, puis saisis une valeur de 1 à 16 ; clic sur OK


Alt F11 pour voir le code VBA, puis revenir sur Excel

pour ajouter d'autres éléments, une seule ligne à modifier : celle de l'array

dhany

Bonjour dhany c'est excellent et nettement plus court Merci pour le temps consacré !! testé et ca marche bien aussi

Bonsoir rocket4,

j'viens d'lire ton dernier post seulement maint'nant.

merci pour ton retour, et pour avoir passé le sujet en résolu !

joyeuses fêtes, et bon réveillon !

dhany

Rechercher des sujets similaires à "lecture inverse tableau"