XL 2019 Condition VBA comprise entre 2 valeurs

LuanaDDC

XLDnaute Nouveau
Bonjour à tous les pros de VBA 😀,

J'espère que vous allez bien.

Je viens à vous car j'ai actuellement un problème concernant ma macro. En effet je souhaite faire une condition qui me permette de remplir automatiquement ma colonne J, ou K ou L par rapport à ma colonne I.
Au niveau de condition c'est :
Si Profondeur est entre 0 à 12 (exclu) donc mettre une X dans la colonne J.
Si Profondeur est entre 12 et 35 donc mettre une X dans la colonne K.
Si Profondeur est supérieur à 35 donc mettre une X dans la colonne L.

J'ai donc essayé avec ce code mais ça ne marche pas du tout...

If 0 < ws1.Range("I" & Nb_Lignes1).Value < 12 Then
'N_Prof = ws1.Range("J" & Nb_Lignes1).Value = "X"
'N_Prof = ws1.Range("K" & Nb_Lignes1).Value = ""
Else
N_Prof = ws1.Range("K" & Nb_Lignes1).Value = "X"
N_Prof = ws1.Range("J" & Nb_Lignes1).Value = ""
End If

1614691092486.png


Pouvez-vous m'aider s'il vous plait ?

Merci !

Bonne journée à vous.
 
Solution
@Luana, le fil,

je te propose le fichier ci-joint. :)

* en J4 : =REPT("x";ET(I4<>"";I4<12))

* en K4 : =REPT("x";ET(I4<>"";I4>=12;I4<=35))

* en L4 : =REPT("x";ET(I4<>"";I4>35))



dans ton post #4, tu as écrit cette phrase :

« je souhaiterais tout de même comprendre pourquoi la macro ne marche pas ^^ »

je veux bien te donner toutes les explications, moi, mais ça va être un peu long ! 😁 😛 :rolleyes: mébon...​

Roblochon

XLDnaute Barbatruc
Bonjour,

Pas certain d'avoir tout compris votre code mais d'après vos explications, deux manières de faire (entre d'autres possibles) :

VB:
Select Case ws1.Range("I" & Nb_Lignes1).Value
    Case 0 To 11
        ws1.Range("J" & Nb_Lignes1) = "X"
 
    Case 12 To 35
        ws1.Range("K" & Nb_Lignes1) = "X"
 
    Case Is > 35
        ws1.Range("L" & Nb_Lignes1) = "X"
 
    Case Else ' facultatif Tous les autre cas on ne fait rien
End Select

Code:
If ws1.Range("I" & Nb_Lignes1).Value >= 0 And ws1.Range("I" & Nb_Lignes1).Value < 12 Then

    ws1.Range("J" & Nb_Lignes1).Value = "X"

ElseIf ws1.Range("I" & Nb_Lignes1).Value <= 35 Then

    ws1.Range("K" & Nb_Lignes1).Value = "X"

Else
   ' Tous le autres cas (< 0 OU >35)
    ws1.Range("L" & Nb_Lignes1).Value = "X"
End If

Joignez un fichier exemple si vous ne vous en sortez pas.

cordialement
 

job75

XLDnaute Barbatruc
Bonjour LuanaDDC, Roblochon,

Le VBA est ici tout à fait superflu, entrez les formules :

- en J5 =SIERREUR(REPT("x";--SUBSTITUE(I5;"m";"")<12);"")

- en K5 =SIERREUR(REPT("x";(--SUBSTITUE(I5;"m";"")>=12)*(--SUBSTITUE(I5;"m";"")<=35));"")

- en L5 =SIERREUR(REPT("x";--SUBSTITUE(I5;"m";"")>35);"")

Nota : dans les SUBSTITUE on peut enlever les "".

A+
 

LuanaDDC

XLDnaute Nouveau
Bonjour Roblochon et Job75,

Merci beaucoup pour vos réponses.

@Roblochon : j'ai essayé la deuxième macro qui fonctionne partiellement...

Mon fichier est trop volumineux...mais voici ce que j'ai :
1614700914430.png


1614700859475.png

Ne faut-il pas mettre If N_Prof = ws1.Range("I" &........) -> le code ci-dessous.

@job75 : la formule fonctionne merci ! mais je souhaiterais tout de même comprendre pourquoi la macro de marche pas ^^'.

Merci pas avance !
 

soan

XLDnaute Barbatruc
@Luana, le fil,

je te propose le fichier ci-joint. :)

* en J4 : =REPT("x";ET(I4<>"";I4<12))

* en K4 : =REPT("x";ET(I4<>"";I4>=12;I4<=35))

* en L4 : =REPT("x";ET(I4<>"";I4>35))



dans ton post #4, tu as écrit cette phrase :

« je souhaiterais tout de même comprendre pourquoi la macro ne marche pas ^^ »

je veux bien te donner toutes les explications, moi, mais ça va être un peu long ! 😁 😛 :rolleyes: mébon, si tu y tiens vraiment, c'est toi qui l'auras voulu ! faudra pas venir te plaindre après, hein ? 😄 😜 alors j'te laisse lire les points 1) à 4) ci-dessous. (j'te souhaite bon courage, car ça va t'faire beaucoup d'lecture ! 🍀)



1) ton test est celui-ci : If 0 < ws1.Range("I" & Nb_Lignes1).Value < 12 Then

que j'abrège en : If 0 < Range("I" & Nb_Lignes1) < 12 Then puis en : If 0 < k < 12 Then

même si mes 2 « résumés » ne sont PAS valides. (c'est juste pour faciliter l'explication)

en effet, VBA ne sait pas faire ainsi ce genre d'intervalle ! il faut l'écrire ainsi :

If k > 0 And k < 12 Then

2) normalement, dans la colonne "Profondeur", tu saisis uniquement des nombres positifs, n'est-ce pas ? même si on sait très bien qu'en réalité, ça représente des nombres négatifs, car comme 0 = le niveau de la mer, quand on plonge par exemple à 20 m de profondeur, c'est : -20 m ! si tu respectais cette notation avec des signes négatifs, et que tu saisissais un nombre positif comme +20 m, ça voudrait dire que tes scaphandriers sont comme des poissons volants qui évoluent à 20 m au-dessus des flots, pas vrai ? 🤪 😄 🤣 ça s'est jamais vu, car c'est impossible ! sauf peut-être pour des scaphandriers tibétains qui se mettraient à léviter ; par exemple Foudre Bénie, celui qui a des visions du migou ! (oui, c'est ça, le migou, c'est le yéti)

tout ça pour en venir là : ça veut dire qu'à contrario, quand tu saisis des nombres avec une notation positive, tes nombres ne peuvent pas être des nombres négatifs ! donc pour le test If k > 0 And k < 12 Then c'est tout à fait inutile de tester le cas > 0 car on sait très bien que ça sera toujours le cas ! aussi, on peut ainsi simplifier le test : If k < 12 Then ; note qu'en principe, pour ton système à notation positive, l'utilisateur n'est pas « idiot » au point de saisir un nombre négatif ; et au besoin, il te suffit de mettre une Validation de données ; en plus, l'utilisateur n'est pas censé saisir le nombre 0 (j'en parle au point suivant)

3) il y a bien 3 conditions différentes, n'est-ce pas ? mais hélas, manque de pot, ta sub ne comporte que ces 2 cas : a) If k > 12 Then ➯ k est strictement supérieur à 12 ; b) Else ➯ k est inférieur ou égal à 12, et sous-entendu strictement supérieur à 0, car même sans plonger au-dessus des flots, c'est aussi impossible de plonger à 0 m car par définition, plongée = sous le niveau de la mer !

tu auras noté que mon paragraphe ci-dessus est par rapport à mon test simplifié If k < 12 Then, mais je suis au grand regret de te dire que malheureusement, le même raisonnement est valable et applicable à ton test initial plus long, et avec syntaxe VBA valide : If k > 0 And k < 12 Then : avec le Else associé, ça fait 2 cas aussi seulement ! 😭

4) il y a bien 3 colonnes différentes pour mettre un "X", n'est-ce pas ? ce sont les 3 colonnes J, K, et L ; alors pourquoi ta sub écrit une valeur "X" uniquement dans les colonnes J ou K ? je ne vois aucune instruction ws1.Range("L" & Nb_Lignes1).Value = "X" ; toi si ? alors par quel miracle espérais-tu que ça écrive un "X" en colonne L ? non, même si VBA t'aime bien et que t'as des affinités avec lui, il n'a pas vocation à exaucer tes désirs cachés, même s'il en meurt d'envie ! alors bon gré mal gré, faudra bien qu'tu lui indique pas à pas toutes les instructions à exécuter.


j'te laisse méditer là-dessus, et surtout, j'espère ne pas t'avoir dégoûtée du VBA : j'en serais le premier tout à fait navré ! tu vas peut-être pas le croire, mais ça m'a pris cinq fois plus de temps pour écrire toutes ces explications que de faire le fichier joint ! alors la prochaine fois, stp, essaye d'écrire une sub qui marche du 1er coup ! non seulement tu seras ravie d'avoir réussi à dompter le sauvage VBA, mais en plus t'auras pas besoin de demander des explications sur le non-fonctionnement de ta sub ! 😁 🤪 🤣 attention, pas de méprise : j'me moque pas de toi, ni de ton code VBA, mais de la situation ! et si t'as besoin de plus d'infos, n'hésite pas ! maint'nant qu'j'ai commencé, un peu plus ou un peu moins, ça f'ra pas une grande différence ! 😜
soan
 

Pièces jointes

  • Exo LuanaDDC.xlsx
    12 KB · Affichages: 6
Dernière édition:

LuanaDDC

XLDnaute Nouveau
Bonjour Soan,

Aloooorss, tout d'abord DESOLEE pour le temps de réponse.. après cette agression visuelle j'ai du lonnngteeempps méditer...😛 Joke bien-sûr, je j'avais pas accès à mon PC.

Ensuite MERCI d'avoir pris le temps de m'expliquer les choses ! Du coup j'ai sauvegardé pour pouvoir refaire par la suite ! Et figure toi que j'ai compris quand même et que tu ne m'as pas (encore) dégoûté du VBA ^^'.

Merci pour la solution (beaucoup plus simple) également !

Passe une très bonne journée.

Luana
 

soan

XLDnaute Barbatruc
Bonjour Luana,

merci beaucoup pour ton retour d'infos, même s'il est tardif ! 😊 et j'comprends très bien le cas de force majeure : si tu ne pouvais pas avoir accès à ton PC, alors forcément... j'espère que c'est pas pa'c'qu'il est tombé au fond d'l'eau ! t'as p't'être dû envoyer tes scaphandriers pour le récupérer ? voici une astuce informatique très importante : avant de te servir de nouveau de ton PC, attends d'abord qu'il soit complètement sec ! 😜 (au besoin, mets ton PC dans la machine à essorer le linge)

je suis tout à fait ravi de ne pas t'avoir dégoûtée du VBA, et je te souhaite bonne chance pour la suite de ton projet actuel, ainsi que pour tes futurs projets. 🍀

passe toi aussi une très bonne journée ! ☀️

soan 🌹
 
Dernière édition:

soan

XLDnaute Barbatruc
Bonjour Luana,

désolé, mais j'ai 3 nouvelles très mauvaises pour toi (n'oublie pas de cliquer sur tous les liens bleus) :

1) tu as écrit : « 😂 si tu savais les trésors qu'ils trouvent.. 😀 » ; c'est vraiment très ambigu : je n'ai pas compris si tu veux dire qu'ils trouvent de vrais superbes trésors ou si au contraire tu as ironisé pour dire que ce ne sont que des babioles (voire même des déchets hétéroclites, peut-être même pollués et nocifs) ; au cas où ce sont de vrais trésors : ça ne leur appartient pas car nos politiciens français ont fait passer une Loi (il y a très longtemps, mais qui est toujours valable actuellement) comme quoi tout trésor trouvé dans les eaux territoriales françaises appartient d'emblée à l'État (eh oui, hélas !) ; traduction en clair : tous les risques sont pour tes scaphandriers, même s'ils y laissent leur vie (accidents de plongée tels que a) maladie des caissons = accident de décompression ; b) visite inopportune et involontaire de l'estomac d'un requin) ; aux politiciens tous les bénéfices (même s'ils n'ont rien fait d'autre que de se prélasser dans leur fauteuil sénatorial) ; certains diraient sans doute que c'est du vol légal et organisé, et même un vrai racket d'État (mais bon, comme de toutes façons tout l'monde sait bien qu'on n'a pas le choix...) ; et tu ne pourras pas dire que tu ne savais pas : « Nul n'est censé ignorer la loi » ; je connais d'avance ta réponse : « adieu, veau, vache, cochon, couvée... » (comme aurait dit Perrette dans « La laitière et le Pot au lait ») ; il ne va te rester que tes yeux pour pleurer ! 😭 (snif !) ; NB : je tiens malgré tout à t'assurer de ma parfaite compréhension, et je compatis sincèrement ! (ah, ben zut ! voilà qu'ça m'reprend, d'parler comme ces politiciens ! ☹️ mais j'te jure : c'est pas moi qui ai fait voter cette loi qui te spolie de tes riches découvertes !)

2) tu as écrit : « PS : pas de problème de RGPD j'ai demandé avant de joindre le fichier » ; commence par lire mon post #8 et les 2 autres que tu verras en dessous ; puis lis très attentivement ce post #29 ; alors tu comprends ce qu'il te reste à faire, n'est-ce pas ? c'est pour ça que dans le fichier joint de mon post #7, j'avais mis des noms fictifs pour les scaphandriers : mon pseudo et le tien ; les 2 apnéistes célèbres du « Grand Bleu » ; Jo Legrand (et sa sœur Zette dans « Le "Manitoba" ne répond plus ») ; les 4 célèbres scaphandriers à la recherche du Trésor de Rackham le Rouge ; celui qui a plongé plus profond que tous les autres réunis, à 20 000 lieues sous les mers : Nemo, le Capitaine (et concepteur) du Nautilus ; un seul nom est réel : William Walker (un britannique né en 1869) ; c'est un des pionniers de la plongée sous-marine, et il a sauvé une cathédrale (véridique !) ; si tu me demandes pourquoi je me suis mis en premier dans la liste, ce n'est pas par orgueil, tout au contraire : c'est moi qui plonge le moins profond, à seulement 1 m sous l'eau ! mais sans bouteilles d'oxygène, avec juste un masque, un tuba et des palmes ; mon plus gros trésor : un crabe, quelques crevettes, et 2 coquillages ; mais même ça, l'État me l'a pris ! 😭 😜 ; bien sûr, ton nombre en i14 est complètement faux : ce n'est pas 42 m mais 20 000 lieues ; la lieue marine vaut trois milles marin, et il paraît que c'est pas pareil que la lieue terrestre ; si tu veux faire un cadeau à ton chat, j'ai vu en vitrine les bottes de sept lieues (non, c'était pas dans un magasin, mais dans un château) ; j'ai failli mettre aussi Jonas ; il a fait de la plongée, lui aussi, et bien malgré lui, mais ce n'était pas un scaphandrier ! 😁 tiens, c'est marrant, quelque part, ça m'rappelle Pinocchio et son père Geppetto : eux aussi se sont retrouvés au fond d'une baleine ! pour notre prochain dîner en tête-à-tête, ça t'irait, comme lieu de RV ? ça a l'air tellement en vogue ! 🤪 dis, tu voudras bien me le dire, si tes scaphandriers découvrent l'Atlantide ? 😛

3) même quand tu auras anonymisé ton fichier, j'aurai pas le temps de m'en occuper, par manque de disponibilité ; si plus tard je trouve un moment de libre, j'essayerai ; mais peut-être qu'alors un autre contributeur t'auras déjà répondu et trouvé une solution ? j'espère que tu m'en voudras pas trop, et peut-être que je pourrai t'aider plus tard pour un autre de tes fichiers Excel renfloués. :rolleyes: 😇

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Bonjour Yeahou,

voici l'explication : c'est car même quand je manque de disponibilité, j'essaye d'écrire des posts les mieux rédigés possibles, y compris en faisant parfois de longues digressions. 😜 et puis aussi, j'ai fait un effort pour Luana : d'après son prénom, elle est peut-être une jolie princesse de Hawaï ? et peut-être aussi une copine de Lilo & Stitch ? Aloha, Luana ! 🌹 non, Yeahou, la jolie rose n'est pas pour toi ! 😁 elle est pour Luana ! et j'y ajoute même une jolie tulipe : 🌷

soan
 

Discussions similaires

  • Résolu(e)
XL pour MAC lenteur du vba
Réponses
14
Affichages
385
Haut Bas