Si imbriqués

Résolu/Fermé
clara2424 - 25 mars 2016 à 10:20
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 - 25 mars 2016 à 11:26
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

2 réponses

Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
Modifié par Arkana0 le 25/03/2016 à 10:44
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 ?
0
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
Modifié par Arkana0 le 25/03/2016 à 11:13
Bon, j'ai simulé un peu. En respectant la structure que tu as imaginée, ton code aura cette allure-là :
Sub Si_imbriques()

If Range("P9").Value = "" Then
If Range("O9").Value = "" Then
If Range("N9").Value = "" Then
If Range("M9").Value = "" Then
Range("E5").Value = Range("L9").Value
Else
Range("E5").Value = Range("M9").Value
End If
Else

Range("E5").Value = Range("N9").Value

End If
Else

Range("E5").Value = Range("O9").Value

End If

Else

Range("E5").Value = Range("P9").Value

End If

End Sub

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 :
Sub Si_imbriques()

For I = 0 To 11

If Cells(9, 16 - I).Value <> "" Then

Range("E5").Value = Cells(9, 16 - I).Value
Exit For

End If

Next

End Sub


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.
0
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é !
0
Arkana0 Messages postés 4399 Date d'inscription mercredi 11 février 2009 Statut Modérateur Dernière intervention 10 février 2023 181
25 mars 2016 à 11:26
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 !
0