Formule si/et/ou en VBA

Non désolé pédro mais ta macro ne fonctionner pas ! Je ne savais pas que la mienne était fausse ... Autant pour moi

Peux-tu m'aider pour supprimer les espaces vides dans les cellules vides de la colonne 17 stp

Non désolé pédro mais ta macro ne fonctionner pas ! Je ne savais pas que la mienne était fausse ... Autant pour moi

Peux-tu m'aider pour supprimer les espaces vides dans les cellules vides de la colonne 17 stp

Tu as créé ce sujet par ce que ta macro ne respectais pas les conditions, je t'ai expliqué pourquoi. Tiens déjà compte de ça pour que l'on s'intéresse à ce second problème, qui est que les cellules "vides" de la colonne 17 ne sont pas réellement vides.

Oui je suis d'accord je relativise et me dit que ta macro doit être bonne mais que cette colonne 17 nous bloque à cause des espaces dans les cellules vides...

Il y a t-il une solution ???

Oui je suis d'accord je relativise et me dit que ta macro doit être bonne mais que cette colonne 17 nous bloque à cause des espaces dans les cellules vides...

Il y a t-il une solution ???

Visiblement tu ne comprends pas de quoi je parle... Oui il y a une solution, mais procède dans l'ordre et commence déjà par apporter les corrections à ton code actuel. Tu nous fais encore perdre du temps.

Ah ok autant pour moi je croyais que tu avais repris ton code de départ que tu avais fait !

Effectivement je nous fait perdre du temps. Désolé pour le dérangement Pedro

Tu ne souhaites plus m'aider donc ?

Tu ne souhaites plus m'aider donc ?

La balle est dans ton camp ! Tu es arrivé sur le forum avec un problème de conditions non respectées sur une instruction "If...End If". La solution et l'explication t'ont été donné, mais tu te présente encore avec ton premier code, non modifié, et donc faux. Corrige donc ce premier problème, et nous passerons ensuite au problème suivant !

Donc maintenant, soit tu te remues et tu apportes les corrections proposées à ton code, soit tu ne le fais pas et je ne t'aiderais pas pour la suite. Le deal est pourtant simple !

Bonjour Pedro,

Après avoir rectifier le codage de la macro :

Sub test3()

With Sheets(1)
    Derligne = .Range("A" & Rows.Count).End(xlUp).Row
    For j = 2 To Derligne
        If .Range("M" & j) = "" And .Range("N" & j) = ""  And .Range("Q" & j)= "" And .Range("S" & j) < 15000 And (.Range("H" & j) = "002160" Or .Range("H" & j) = "001170" Or .Range("H" & j) = "001121") Then
            .Range("M" & j) = "PAS DE DECOMPTE"
        Else
            .Range("M" & j) = "DECOMPTE A EMETTRE"
        End If
    Next j
End With

End Sub

La macro fonctionne mais à moitier car la colonne 17 donc la colonne" Q", "déconne" avec les espaces dans les cellules "vides".

Bonjour Kévin,

Avant de passer à la suite, as tu bien compris l'intérêt de la correction ?

Je vais pousser le vice en te demandant de m'expliquer ce qui change par rapport à ton code initial ? Le but étant que tu comprennes bien de quoi il s'agit, sinon tu ne seras pas autonome sur ton propre fichier, ce qui serait dommage (voir risqué, surtout dans le secteur bancaire).

Pedro je te caches pas, je vois pas une grande différence avec mon codage à moi, peux-tu m'éclairer stp ...

Je dis exactement la même chose que là, on a juste rectifier par Range...

Je dis exactement la même chose que là, on a rectifier par Range...

Non, la différence est la même qu'entre ces 2 écritures :

Si (Condition1 et Condition2 et Conition3 et Condition4) ou (Condition5) ou (Condition6), alors...

Si Condition1 et Condition2 et Conition3 et (Condition4 ou Condition5 ou Condition6), alors...

Les parenthèses dans la première écriture sont inutiles, mais elles permettent de voir comment sont interprétées les conditions par défaut. Dans le premier cas, le code est exécuté si ou moins l'un des 3 éléments entre parenthèses est VRAI.

Dans le second, il faut que les 3 premières conditions soient TOUTES VRAIES et qu'au moins une des 3 suivantes soit VRAIE.

La parenthèse n'est pas décorative, elle définie l'ordre d'interprétation. La syntaxe "Range" ou "Cells" est, comme indiquée précédemment, complètement sans effet.

Relis bien ce message, il est ultra important. Je t'invite à faire un essai sur un fichier complètement fictif pour expérimenter ça sur des cas simples. C'est primordial !

Oui effectivement, je vois très bien ce que tu veux dire !

Merci pour ton explication

Si (Condition1 et Condition2 et Conition3 et Condition4) ou (Condition5) ou (Condition6), alors...

Si Condition1 et Condition2 et Conition3 et (Condition4 ou Condition5 ou Condition6), alors...

En formule Excel, ça donne :

=SI(OU(ET(Condition1;Condition2;Condition3;Condition4);Condition5;Condition6);"VRAI";"FAUX")

=SI(ET(Condition1;Condition2;Condition3;OU(Condition4;Condition5;Condition6));"VRAI";"FAUX")

Ces 2 écritures sont différentes, et produisent donc des résultats différents.

Exactement, il s'agissait bien depuis le début de la deuxième formule "Si" à respecter.

Concernant les espaces vides dans les cellules "vides" dans la colonne Q, je pense qu'on pourrait rajouter dans la macro la fonction Trim.. mais je sais pas comment lui dire qu'il supprime que les espaces dans les cellules "vides"

Bien,

Donc concernant la colonne 17 (colonne "Q"), une fois que tu as transformé tes dates en date, tu peux remplacer dans la formule "Si" :

.Range("Q" & j) = ""

Par :

Not IsNumeric(.Range("Q" & j))

Ou :

Not IsDate(.Range("Q" & j))

A tester sur ton fichier. Si ça ne fonctionne toujours pas, on peut aussi imaginer supprimer les espaces au niveau de la macro de conversion en date, et garder ce code ci tel qu'il est déjà.

Non ça ne fonctionne pas, il y une erreur de type 13

Non ça ne fonctionne pas, il y une erreur de type 13

Avec quel code retenu ? Sur quelle ligne de ton fichier et de ton code ça bloque ?

ca bloque a cette ligne

 If .Range("M" & j) = "" And .Range("N" & j) = "" And Not IsNumeric(.Range("Q" & j)) And .Range("S" & j) < 15000 And (.Range("H" & j) = "002160" Or .Range("H" & j) = "001170" Or .Range("H" & j) = "001121") Then
Rechercher des sujets similaires à "formule vba"