Formule si/et/ou en VBA

C'est bon le code passe mais il prend pas en compte les conditions qu'on à indiquer ... ca fait exactement la même chose dans le fichier que je t'avais envoyer avec les lignes oranges. J'ai l’impression qui comprends pas le <15000 en colonne S

C'est bon le code passe mais il prend pas en compte les conditions qu'on à indiquer ... ca fait exactement la même chose dans le fichier que je t'avais envoyer avec les lignes oranges. J'ai l’impression qui comprends pas le <15000 en colonne S

Renvoie moi un fichier complet et représentatif stp.

Dnas le fichier je t'ai mis en oranges les lignes qui ne sont pas bonnes et qui auraient du être en colonne M, en commentaire "Pas de décompte" et en couleur jaune les lignes qui sont correctes. Pour t'aider, tu peux faire un filtre sur la colonne H est tu prends les 3 valeurs qu'on à indiqué dans la formule....

Mais en gros il te prend pas du tout en compte notre formule

Je t'ai mis la macro dans VBA et si tu peux essayer de faire des test sur mon fichier stp pour voir ce qui ne va pas. Je sais que les espaces en cellule vide en colonne Q sont toujours présents. Après je ne sais pas si c'est à cause de cela... A voir

2kobd.xlsm (180.82 Ko)

Après vérification rapide, tout me semble en ordre...

Si ColM est vide et ColN est vide et ColQ n'est pas une date et ColS < 15000 et (ColH = "002160" ou ColH = "001170" ou ColH = "001121") alors ColM="PAS DE DECOMPTE" sinon ColM="DECOMPTE A EMETTRE"

Seule la ligne 4 remplie toutes tes conditions :

  • M4 et N4 vides
  • Pas de date en Q4
  • S4 < 15000
  • H4 = "001121"

Je te laisse vérifier par toi-même, j'ai ajouté 2 macros pour vérifier les différents cas :

  • La 1ère colore en rouge les cas invalides (la condition n'est pas respectée)
  • La seconde ne met "VRAI" que s'il n'y a aucune cellule rouge dans la ligne (en clair, que toutes les conditions sont respectées)
3kobd-1.xlsm (136.61 Ko)

C'est vraiment top Pedro ! Tu m'as vraiment sauvé

Je te félicite pour avoir résolu mes problèmes et je te félicite de m'avoir fait comprendre et expliqué les différents code

C'est vraiment top Pedro ! Tu m'as vraiment sauvé

Je te félicite pour avoir résolu mes problèmes et je te félicite de m'avoir fait comprendre et expliqué les différents code

C'est parfois plus long que ce que j'imaginais au départ !

Bonne continuation

Bonjour Pédro

Je suis sur un autre fichier "casi identique" pour tester la macro et il y a des petits beug...

Je voudrais qu'il me supprime les NA dans la colonne 14

Sub Decompte()

Dim j As Integer

With Sheets("SUIVTRANS EN COURS")
    Derligne = .Range("A" & Rows.Count).End(xlUp).Row
    For j = 3 To Derligne

    If Not IsError(.Cells(j, 14)) Then

        If .Range("M" & j) = "" And .Range("N" & j) = "" And Not IsDate(.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
        Else: .Cells(i, 14).ClearContents
        End If
    Next j
End With

End Sub

et ca fonctionne pas j'ai rajouter le If not IsError

Bonjour,

Reprend la macro de traitement de la colonne 17, elle réalisait déjà cette opération. A toi de l'adapter pour la colonne 14.

C'est ce que j'ai fais pas ça ne passe pas.... j'ai remplacé par la colonne 14

C'est ce que j'ai fais pas ça ne passe pas.... j'ai remplacé par la colonne 14

Merci d'être un peu plus précis... La macro plante ? Elle ne fait rien ? Elle fait quelque chose, mais pas ce que tu veux ? Bref, j'ai pas ton fichier ni ton écran sous les yeux, et j'ai perdu ma boule de cristal !

Cela dit, je pense savoir pourquoi ça ne fonctionne pas... Commente bien ton code, pour me décrire au fur et mesure ce qu'il fait (ou ce que tu penses qu'il fait). Pour ajouter un commentaire dans le code, il suffit d'ajouter un ' devant le commentaire.

C'est bon j'ai réussi ahah !

En revanche pedro quand je lance la macro Décompte qui est la suivante :

Sub Decompte()

Dim j As Integer

With Sheets("SUIVTRANS EN COURS")
    Derligne = .Range("A" & Rows.Count).End(xlUp).Row

    For j = 2 To Derligne
    If Not IsError(.Cells(j, 14)) Then

        If .Range("M" & j) = "" And .Range("N" & j) = "" And Not IsDate(.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
        Else: .Cells(j, 14).ClearContents
        End If
    Next j
End With

End Sub

Il ne tient pas en compte des colonne M, N qui doivent être vides.... Ça me les remplace par d'autre commentaire que j'ai mis avant

Il ne tient pas en compte des colonne M, N qui doivent être vides.... Ça me les remplace par d'autre commentaire que j'ai mis avant

J'ai bien compris, c'est sans doute que ces colonnes ne sont pas réellement vides non plus... Pour que l'on puisse avancer, merci de commenter ton code pour que l'on reprenne ensemble, étape par étape, ce qu'il fait... et ce qu'il ne fait pas (et qu'il faut qu'on ajoute).

Vu le bazar que ça a l'air d'être dans ton fichier, je crois que tu devrais procéder différemment. Il serait judicieux de lister tous les cas de figures qui peuvent se présenter dans les colonnes sur lesquelles tu veux travailler, afin de voir comment les gérer les uns après les autres.

Si je reprend l'exemple de la colonne 17, tu ne souhaitais au final travailler que sur les dates, mais cette colonne pouvait aussi contenir :

  • Rien (complètement vide)
  • Des espaces (vide en apparence)
  • Des messages d'erreur ("#N/A!")
  • Des dates à convertir en format date

A part les dates et les dates à convertir, le reste peut être supprimé, ce qui évite de formuler ensuite 50 cas dans ta macro Décompte.

Tes colonnes 13 et 14 (M et N) étant à priori dans un cas de figure similaire, il serait judicieux de mettre ça au clair, puis d'intégrer dans ta macro une étape préliminaire de nettoyage et de standardisation des données...

Exemple :

Sub Decompte()

Dim i As Long, Temp As String

With Sheets("SUIVTRANS EN COURS")
    Derligne = .Range("Q" & Rows.Count).End(xlUp).Row
    'Nettoyage données
    For i = 2 To Derligne
        'Nettoyage colonne Q
        If IsError(.Range("Q" & i)) Then .Range("Q" & i).ClearContents
        If Not Len(Replace(.Range("Q" & i), " ", "")) = 8  Then .Range("Q" & i).ClearContents
        'Conversion des dates
        If Not IsEmpty(.Range("Q" & i)) Then
            Temp = Replace(.Range("Q" & i), " ", "")
            .Range("Q" & i) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))
        End If
        'Nettoyage colonne M
        If Not .Range("M" & i) = "PAS DE DECOMPTE" Or Not .Range("M" & i) = "DECOMPTE A EMETTRE" Then .Range("M" & i).ClearContents
        'Nettoyage colonne N
        'Code à compléter
    Next i
    'Ajout état décompte
    For i = 2 To Derligne
        If .Range("M" & i) = "" And .Range("N" & i) = "" And Not IsDate(.Range("Q" & i)) And .Range("S" & i) < 15000 And (.Range("H" & i) = "002160" Or .Range("H" & i) = "001170" Or .Range("H" & i) = "001121") Then
             .Range("M" & i) = "PAS DE DECOMPTE"
        Else
             .Range("M" & i) = "DECOMPTE A EMETTRE"
        End If
    Next i
End With

End Sub

Bon Pédro voici, le fichier : je t'explique je t'ai mis la macro de décompte qui fonction mais qui prend pas en compte la colonne Met N et j'ai vérifier ce sont bien des cellule vides sans espaces, donc bizard. Ensuite, la macro qui converti la date en colonne 17 marche très bien sauf que maintenant, il y a des "0" qui faudrait supprimer dans certaines cellules car c'est inutiles sous forme vba.

Ps: Ne pas modifier les commentaires déjà présents en M et N car il ne faut pas que la macro les remplaces... juste qu'elle tienne compte des cellulles vide en M ET N.

J'espère tu pourras m'éclairer, j'aurais bien voulu, trouver la solution tous seul mais impossible pourtant je galère depuis des heures...

2kbd-8.xlsm (86.25 Ko)

Bon Pédro voici, le fichier : je t'explique je t'ai mis la macro de décompte qui fonction mais qui prend pas en compte la colonne Met N et j'ai vérifier ce sont bien des cellule vides sans espaces, donc bizard. Ensuite, la macro qui converti la date en colonne 17 marche très bien sauf que maintenant, il y a des "0" qui faudrait supprimer dans certaines cellules car c'est inutiles sous forme vba.

Ps: Ne pas modifier les commentaires déjà présents en M et N car il ne faut pas que la macro les remplaces... juste qu'elle tienne compte des cellulles vide en M ET N.

J'espère tu pourras m'éclairer, j'aurais bien voulu, trouver la solution tous seul mais impossible pourtant je galère depuis des heures...

KBD 8 .xlsm

Encore une fois, la macro fonctionne très bien, elle fait ce que tu lui demande ! En revanche tu ne lui demande peut-être pas ce qu'il faut, et c'est là que tu ne fais pas d'efforts pour poser TRÈS CLAIREMENT et de FAÇON DÉTAILLÉE ce que doit faire cette macro.

Telle qu'elle est construite, la macro écrase forcément le contenu de ta colonne M, puisqu'il n'y a que 2 choix possibles : ou les conditions sont respectées et on inscrit "PAS DE DECOMPTE", ou elle ne le sont pas et on inscrit "DECOMPTE A EMETTRE".

Il est plus que temps que tu fasses les efforts nécessaires pour poser clairement ton besoin, pour exprimer en quoi le travail actuel n'y répond pas, pour disséquer les solutions proposées et pour que je n'ai pas à insister pour avoir les éléments qui servent à résoudre TON problème. Ces éléments, tu les donnes aujourd'hui au compte goutte en ne répondant qu'à la moitié de mes demandes !

...pourtant je galère depuis des heures...

Tu prétends y passer des heures, je prend aussi beaucoup de temps pour t'aider et pourtant ce n'est pas efficace... Il faut se poser les bonnes questions.

Bonjour Pédro,

Non la macro ne doit pas écraser les données déjà inscrite dans la colonne M. En revanch, la condition elle est mise que si M et N sont vides donc elle devrait écraser aucune donner de la colonne M...

Tu vois ce que je veux dire ou pas ?

Bonjour Pédro,

Non la macro ne doit pas écraser les données déjà inscrite dans la colonne M. En revanch, la condition elle est mise que si M et N sont vides donc elle devrait écraser aucune donner de la colonne M...

Tu vois ce que je veux dire ou pas ?

Bonjour Kévin,

J'ai parfaitement compris, en revanche tu n'as pas du lire ce que j'ai écris, une fois de plus... Ta macro fonctionne parfaitement, mais elle n'est pas conçue pour faire ce que tu souhaite, visiblement.

Je t'invite donc, une fois encore, à te poser pour réfléchir à ce qu'elle doit faire, plutôt que de foncer tête baissée et de compter sur le forum pour faire le travail à ta place !

Elle doit faire exactement la même chose, sauf qu'elle doit pas écraser les données déjà inscrit en colonne M. Donc le problème est exposé ici, je vois pas comment faire... Pour cela que je te demande comment il serait possible, de lui dire que pour "Decompte à émettre" il le met que si Met N sont vides du coup ...

Rechercher des sujets similaires à "formule vba"