Si imbriqués
Résolu
clara2424
-
Arkana0 Messages postés 6365 Date d'inscription Statut Modérateur Dernière intervention -
Arkana0 Messages postés 6365 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je souhaite faire une fonction de si imbriqués mais j'en ai plus que 7 donc ce n'est pas possible sur Excel c'est trop long. je souhaite donc passer sur VBA mais je suis débutant.
j'ai des cases de E9 à P9 et je souhaite que la case E5 prenne l'une des valeurs de E9 à P9 : la dernière non vide !
si P9 est vide alors E5 = O9
si O9 est vide alors E5 =N9
si N9 est vide alors E5= M9
... jusqu'à E5= E9
et si E9 est vide inscrire erreur.
mon essai pas très glorieux donne ça :
Sub Si_imbriquées()
Dim numera As Integer
If Range("P9") = "" Then numero = Range("O9")
ElseIf Range("O9") = "" Then numero = Range("N9")
ElseIf Range("N9") = "" Then numero = Range("M9")
ElseIf Range("M9") = "" Then numero = Range("L9")
ElseIf Range("L9") = "" Then numero = Range("K9")
ElseIf Range("K9") = "" Then numero = Range("J9")
ElseIf Range("J9") = "" Then numero = Range("I9")
ElseIf Range("I9") = "" Then numero = Range("H9")
ElseIf Range("H9") = "" Then numero = Range("G9")
ElseIf Range("G9") = "" Then numero = Range("F9")
Else: numero = Range("E9")
End If
End Sub
merci
je souhaite faire une fonction de si imbriqués mais j'en ai plus que 7 donc ce n'est pas possible sur Excel c'est trop long. je souhaite donc passer sur VBA mais je suis débutant.
j'ai des cases de E9 à P9 et je souhaite que la case E5 prenne l'une des valeurs de E9 à P9 : la dernière non vide !
si P9 est vide alors E5 = O9
si O9 est vide alors E5 =N9
si N9 est vide alors E5= M9
... jusqu'à E5= E9
et si E9 est vide inscrire erreur.
mon essai pas très glorieux donne ça :
Sub Si_imbriquées()
Dim numera As Integer
If Range("P9") = "" Then numero = Range("O9")
ElseIf Range("O9") = "" Then numero = Range("N9")
ElseIf Range("N9") = "" Then numero = Range("M9")
ElseIf Range("M9") = "" Then numero = Range("L9")
ElseIf Range("L9") = "" Then numero = Range("K9")
ElseIf Range("K9") = "" Then numero = Range("J9")
ElseIf Range("J9") = "" Then numero = Range("I9")
ElseIf Range("I9") = "" Then numero = Range("H9")
ElseIf Range("H9") = "" Then numero = Range("G9")
ElseIf Range("G9") = "" Then numero = Range("F9")
Else: numero = Range("E9")
End If
End Sub
merci
2 réponses
Bonjour,
Essaye avec Range(...).Value et pas besoin de ":" après ton dernier "else"
Et pour que si ça marche, plutôt que des "ElseIf", je pense qu'il faut que tu imbriques tes "if" comme ça :
If ... then
If then
[...]
End if
End if
Car le but est de trouver la première case non-vide si j'ai bien compris ?
Essaye avec Range(...).Value et pas besoin de ":" après ton dernier "else"
Et pour que si ça marche, plutôt que des "ElseIf", je pense qu'il faut que tu imbriques tes "if" comme ça :
If ... then
If then
[...]
End if
End if
Car le but est de trouver la première case non-vide si j'ai bien compris ?
ah oui c'est bcp plus court comme tu me le proposes et en plus ça marche!
je sais pas si jarriverai a le refaire mais c'est parfait!
merci mille fois !
Ce qui me pose pb c'est plus le language j'ai fait du turbo pascal avt donc je comprends le principe mais utiliser les bons termes c'est le plus compliqué !
je sais pas si jarriverai a le refaire mais c'est parfait!
merci mille fois !
Ce qui me pose pb c'est plus le language j'ai fait du turbo pascal avt donc je comprends le principe mais utiliser les bons termes c'est le plus compliqué !
C'est pour ça que j'ai tenté d'expliquer le principe de ce code :)
Mais c'est certain qu'il faut avoir l'esprit algorithmique pour être à l'aise dans cette façon de penser (merci les cours de C).
Pour ce qui est des syntaxes, tu peux utiliser ce site https://www.excel-pratique.com/fr/vba/couleurs.php
Personnellement j'en abuse.
N'oublie pas de cliquer sur le bouton signalant que le problème est résolu !
Mais c'est certain qu'il faut avoir l'esprit algorithmique pour être à l'aise dans cette façon de penser (merci les cours de C).
Pour ce qui est des syntaxes, tu peux utiliser ce site https://www.excel-pratique.com/fr/vba/couleurs.php
Personnellement j'en abuse.
N'oublie pas de cliquer sur le bouton signalant que le problème est résolu !
Tu noteras qu'une variable "numéro" est inutile.
Il manquait principalement le "qu'est-ce qui se passe si la case n'est pas vide ?"
Je ne suis pas allé jusqu'au bout car tu vois que c'est un peu long à taper... aussi je suis tenté de te proposer ce code qui simplifie beaucoup l'écriture :
Le principe :
La boucle For va tourner 12 fois maximum (car de P à E ça fait 12 colonnes), la valeur I initialisée à 0 va augmenter de 1 à chaque relance de la boucle.
Cells(9,16) fait référence à la cellule de la 9ème ligne et de la 16ème colonne, soit P9.
A chaque tour, elle fera référence à la colonne précédente vu qu'on y retranche I.
Dès qu'elle tombe sur une valeur, E5 prend cette valeur et on sort de la boucle avant qu'elle n'ait fait ses 12 tours.