Chercher une précédence

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

awa123

XLDnaute Occasionnel
Bonjour,


j'ai des noms d'opération sur ma premiere colonne de mon tableau auxquelles je leur ai affecté une valeur sur la 2eme colonne.

Si le nom de l'opération fini par un "1" alors j'affiche sa valeur par une msgbox SINON je vais chercher le même préfixe de l'opération (les deux premiers caractères) et j’enlève 1 au dernier chiffre afin de trouver la valeur de son opération précédente dans le tableau.

Tout ceci afin d'afficher les valeurs cumulées (celles de l'opération en question + son opération précédente).

je suis parti du code suivant mais je n'arrive pas à lui dire de chercher le même préfixe en soustrayant de 1 le dernier chiffre




Code:
 Sub test()
 
Dim tableau(3, 2) As Variant
 
 
tableau(0, 1) = "O11"
tableau(0, 2) = 1
tableau(1, 1) = "O12"
tableau(1, 2) = 3
tableau(2, 1) = "O21"
tableau(2, 2) = 2
tableau(3, 1) = "O22"
tableau(3, 2) = 4
 
For i = 0 To UBound(tableau, 1)
 
 
 
 If Right(tableau(i, 1), 1) = 1 Then
 
     MsgBox tableau(i, 2)
 
 
   ' sinon on va chercher l'opération précedante
 Else
 
 
   ' MsgBox "valeur cumulée" = tableau(i, 2) +
 
   'Afficher la valeur de l'opération en question
   ' + la valeur de l'opération précédente qui a le même préfixe ("O1" ou "O2") que l'opération en question
 
 
 End If
 
Next i
 
 
End Sub

merci beaucoup
 
Dernière édition:
Re : Chercher une précédence

bonjour,

Quelques précisions semblent nécessaires:

Si le nom de l'opération fini par un "1" alors j'affiche sa valeur par une msgbox
OK
SINON je vais chercher le même préfixe de l'opération (les deux premiers caractères)
par exemple si j'ai 012 je prend 01, et si j'avais 022 je prend 02

et j’enlève 1 au dernier chiffre
donc de 01 on passe à 00 ? de 02 je passe à 01 ?

afin de trouver la valeur de son opération précédente dans le tableau.
?? si je reprend votre code, on a 3 opérations 011,012,022. si je traite 012 quelle est la valeur de la précédente opération ? pareil pour 022


Dites nous en clair ce que vous voulez obtenir

A+
 
Dernière édition:
Re : Chercher une précédence

Bonjour

Des recherches aisées dans les macros sont à effectuer à l'aide de Dictionary.
Beaucoup les gèrent à l'aide de variables déclarées As Object grâce à l'expression CreateObject("Scripting.Dictionary") qui en représente une nouvelle instance. Je vous conseille plutôt de cocher la référence "Microsoft Scripting Dictionary". Elle définit le type Dictionary, permet une nouvelle instance par New Dictionary, facilite le programmation en suggérant les méthodes et propriété à la frappe d'un point, et engendre leurs liaisons anticipées, résolues au moment de la compilation et non retardées jusqu'à l'exécution, donc plus rapides.
 
Re : Chercher une précédence

oui pardon je suis aller trop vite


par exemple si j'ai "O22" je conserve toujours le préfixe "O2" et comme cette opération ne se finit pas par 1 donc je vais enlever 1 à son dernier chiffre qui deviendra donc "O21" (en gros ici je cherche son opération précédente) , a partir de là je vais chercher quelle valeur a "O21" dans le tableau, en l’occurrence cette opération vaut 2.

la manip. ci-dessus c'est juste pour identifier quelle valeur a l'opération précédente.

Enfin j'affiche maintenant l'addition de la valeur de son opération précédente qu'on vient de trouver (qui vaut 2) + la valeur qu'a l'opération en question "O22" (qui vaut 4 d’après le tableau)


oui c'est bien ça il faut maintenant qu'on traite l'opération "O12" et "O22" car il ne se terminent pas par 1

merci
 
Dernière édition:
Re : Chercher une précédence

Re,

je prend O11, se termine par 1 => j'affiche sa valeur
je prend O12, se termine pas par 1, je recherche la valeur de O11
je prend O22, se termine pas par 1, je cherche la valeur de O21 ... mais cette valeur n'existe pas !! que faire

S'il faut prendre la valeur de l'opération se terminant par 1, pourquoi affecter une valeur aux opérations ne se terminant pas par 1?

A+

Edit: je n'avais pas vu les échanges précédents, ni la partie cumul des valeurs des opérations . Donc je n'ai rien dit!


Par contre est on limité à 2 opération par types(O11-O12,O21-O22) ?
 
Dernière édition:
Re : Chercher une précédence

oui dsl c'est ce que j'ai dit juste avant votre réponse, je l'avais oublié, je viens de la rajouter dsl

il faut absolument chercher l'opération précédente pour savoir combien de temps elle a pris pour ensuite la cumulé avec l'opération en question , contrainte de précédence oblige ( on ne peut pas bâtir le toit d'une maison sans avoir fait les fondements, exemple bidon mais c'est pour que je me fasse comprendre 🙂).
 
Dernière édition:
Re : Chercher une précédence

Ils se suivent dans l'ordre. C'est simple alors: cumulez au fur et à mesure dans une variable Total ce que vous trouvez en tableau(, 2) jusqu'à ce que les 2 1ers caractères de Tableau(, 1) changent, auquel cas vous remettez à 0 votre variable Total.
 
Dernière édition:
Re : Chercher une précédence

le probleme c'est que c'est pas toujours le cas ,

je risque de me retrouver avec une configuration comme ceci
Code:
Sub test()
 
Dim tableau(3, 2) As Variant
 
 
tableau(0, 1) = "O11"
tableau(0, 2) = 1
tableau(1, 1) = "O21"
tableau(1, 2) = 2
tableau(2, 1) = "O12"
tableau(2, 2) = 3
tableau(3, 1) = "O22"
tableau(3, 2) = 4
 
For i = 0 To UBound(tableau, 1)
 
 
 
 If Right(tableau(i, 1), 1) = 1 Then
 
     MsgBox tableau(i, 2)
 
 
   ' sinon on va chercher l'opération précedante
 Else
 
 
   ' MsgBox "valeur cumulée" = tableau(i, 2) +
 
   'Afficher la valeur de l'opération en question
   ' + la valeur de l'opération précédente qui a le même préfixe ("O1" ou "O2") que l'opération en question
 
 
 End If
 
Next i
 
 
End Sub

mais une chose est sur , les premieres opération seront toujours avant leur successeurs dans le tableau
 
Re : Chercher une précédence

VB:
Sub test()
Dim Tableau(3, 2) As Variant, Cumul As Double, L As Long, Clé As String
Dim D As Dictionary ' (ou Object, en programmation dégradée, sans la réf "Microsoft Scripting Runtime")
Set D = New Dictionary ' (ou createobject("Scripting.Dictionary")
 
Tableau(0, 1) = "O11"
Tableau(0, 2) = 1
Tableau(1, 1) = "O21"
Tableau(1, 2) = 2
Tableau(2, 1) = "O12"
Tableau(2, 2) = 3
Tableau(3, 1) = "O22"
Tableau(3, 2) = 4
 
For L = 0 To UBound(Tableau, 1)
   Clé = Left$(Tableau(L, 1), 2)
   Cumul = D(Clé) + Tableau(L, 2)
   MsgBox Cumul
   D(Clé) = Cumul
   Next L
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
708
Réponses
15
Affichages
788
Réponses
5
Affichages
914
Réponses
7
Affichages
483
Retour