Formule si/et/ou en VBA

Merci c'est génial pour le 1er code il y a un blocage sur cette ligne qui affiche une érreur de type 13 :

.Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))

Code révisé :

Sub ConvertDate()

Dim i As Long, Temp As String

With Sheets(1)
    Derligne = .Range("Q" & Rows.Count).End(xlUp).Row
    For i = 2 To Derligne
        If Not IsError(.Cells(i, 17)) Then
            If Len(Replace(.Cells(i, 17), " ", "")) = 8 Then
                Temp = Replace(.Cells(i, 17), " ", "")
                .Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))
            End If
        Else: .Cells(i, 17).ClearContents
        End If
    Next i
End With

End Sub

Super ca fonctionne t'es génial Pedro !!!!

En revanche peut tu m'expliqué un peu cette ligne : If Not IsError(.Cells(i, 17))

Et cette ligne : .Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))

Je ne comprends pas le Mid : le 3,2 j'arrive pas a me repérer sur la date par exemple : 11 12 2018. Il correspond à quoi le 3,2.

Et cette ligne : If Len(Replace(.Cells(i, 17), " ", "")) = 8 Then

A quoi sert le Len et pourquoi tu mets égale à 8.

En tous cas je te remercie de ton aide précieuse

Ca m'affiche plus de message d'erreur mais la macro fait rien ....

Chez moi ça marche sans problèmes, donc il va me falloir plus d'infos, et idéalement ton fichier et tes codes complets...

Super ca fonctionne t'es génial Pedro !!!!

En revanche peut tu m'expliqué un peu cette ligne : If Not IsError(.Cells(i, 17))

Et cette ligne : .Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))

Je ne comprends pas le Mid : le 3,2 j'arrive pas a me repérer sur la date par exemple : 11 12 2018. Il correspond à quoi le 3,2.

Et cette ligne : If Len(Replace(.Cells(i, 17), " ", "")) = 8 Then

A quoi sert le Len et pourquoi tu mets égale à 8.

En tous cas je te remercie de ton aide précieuse

En revanche peut tu m'expliqué un peu cette ligne : If Not IsError(.Cells(i, 17))

Il s'agit de vérifier que la cellule ne contient pas de message d'erreur du type "#N/A", auquel cas on supprime le contenu avec l'instruction :

Else: .Cells(i, 17).ClearContents

Et cette ligne : .Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2)))

DateSerial est une fonction qui permet de reconstituer une date en indiquant l'année, le mois et le jour (fonction DATE() sous Excel).

CInt convertie un nombre stocké sous forme de chaîne de caractères en nombre entier

Right est l'équivalent VBA de la fonction Excel DROITE(Chaine;NbCaractères)

Left : idem avec la fonction GAUCHE

Mid : idem avec la fonction STXT

Je ne comprends pas le Mid : le 3,2 j'arrive pas a me repérer sur la date par exemple : 11 12 2018. Il correspond à quoi le 3,2.

Mid permet de récupérer un nombre de caractères défini (ici 2), à partir d'une position définie dans la chaîne de caractères (ici, à partir du 3ème caractère). Comme on a au préalable supprimé les espaces, cette fonction permet de récupérer le mois : 11122018.

Et cette ligne : If Len(Replace(.Cells(i, 17), " ", "")) = 8 Then

Len est l'équivalent VBA de NBCAR(), et donne le nombre de caractères d'une chaîne. Une fois que l'on a supprimé les espaces, on ne travaille que sur des dates à convertir, qui ont donc logiquement 8 caractères (JJMMAAAA).

Excellent, Vraiment t'es au top ! merci beaucoup pour tes explication et je te souhaite un bon week-end et à bientôt sur d'autre sujet de VBA !

Excellent, Vraiment t'es au top ! merci beaucoup pour tes explication et je te souhaite un bon week-end et à bientôt sur d'autre sujet de VBA !

Au plaisir !

Re Pedro,

Concernant l'ancienne macro décompte, j'ai un soucis maintenant après rectification de la colonne 17, j'ai l'impression qu'il reconnait pas le <15000 pour la colonne S.

Je te mets le fichier excel et il y a la macro dans VBA.

3kobd.xlsx (74.83 Ko)

En fait je veux que si la colonne M, N et Q sont vides et que dans la colonne H c'est égale à "001121" ou "001170" ou "002160" et que la colonne S soit <15 000 alors je mets en M " Pas de décompte" Sinon je mets "Décompte à émettre" mais en prenant toujours compte de la colonne Met N vide (pour le commentaire "Décompte à émettre", je ne veux pas qu'il remplace par tous me ancien commentaire que j'ai mis avant.).

Et sur mon fichier on voit bien quand on lance la macro, que dans quelque ligne sa marche et que d'autre il prend pas en compte la colonne S avec les <15000

Je te mets le fichier excel et il y a la macro dans VBA. KOBD .xlsx

Il n'y a pas de macro dans ton fichier, puisque tu l'as fourni au format ".xlsx". Aussi, plutôt que je cherche par moi même, si tu pouvais ajouter tous les résultats qui devraient être obtenu, et mettre en évidence (par exemple avec une couleur de fond spécifique) les cas où le résultat n'est pas celui attendu...

Ah oui désolé pour le fichier voici le bon : je t'ai mis en orange les ligne qui sont pas bonne et où en le commentaire aurait du être "Décompte à émettre" pour toute les lignes orange. Concernant les lignes non surligné, elles sont correcte !

MERCI A TOI

3kobd.xlsm (74.85 Ko)

Les 3 dernières lignes en orange sont bonnes, je suis désolé j'espère tu auras compris. Donc j'aurais pas du les surlignées en orange.

Ah oui désolé pour le fichier voici le bon : je t'ai mis en orange les ligne qui sont pas bonne et où en le commentaire aurait du être "Décompte à émettre" pour toute les lignes orange. Concernant les lignes non surligné, elles sont correcte !

MERCI A TOI KOBD .xlsm

Ton fichier n'a ni macro, ni ligne en orange...

C'est pas possible !!

Dit moi si c'est le bon celui la ...

5kobd.xlsm (82.30 Ko)

Oui, j'y jette un oeil.

Autant pour moi, il n'y a toujours aucun code VBA !!!

Voila avec la macro

4kobd.xlsm (88.31 Ko)

Pedro je viens de m'apercevoir que de dans la fameuse colonne 17 où on a supprimé les espaces, il reste des cellules vide avec des espaces a l'intérieur... Peut être pour ca que la macro ne fonctionne pas

Pedro je viens de m'apercevoir que de dans la fameuse colonne 17 où on a supprimé les espaces, il reste des cellules vide avec des espaces a l'intérieur... Peut être pour ca que la macro ne fonctionne pas

Oui c'est surement une des causes de ton problème, mais je m'aperçois surtout que ta macro est la même que celle de départ, en clair que tu n'as tenu compte nulle part des remarques que l'on t'as faites. Ne t'étonne donc pas que le résultat ne soit pas celui attendu.

Si pedro j'ai essayer la tienne mais elle ne fonctionne pas non plus, donc vu que les 2 sont bonne je comprends mieux l'écrire de celle qui est dans le fichier tout simplement. La tienne est très bien aussi mais ne fonctionne pas de même que la mienne ahah

De plus, avec Case j'ai plus de mal ...

Mais avec plaisir faisons les test avec ta macro. Ce qui m’embête, c'est nos 2 macro sont bonnes et que ça ne fonctionne pas

Si pedro j'ai essayer la tienne mais elle ne fonctionne pas non plus, donc vu que les 2 sont bonne je comprends mieux l'écrire de celle qui est dans le fichier tout simplement. La tienne est très bien aussi mais ne fonctionne pas de même que la mienne ahah

De plus, avec Case j'ai plus de mal ...

Non justement, ta macro n'est pas bonne. Et je n'ai pas non plus proposé de code avec Select Case...

Je passe un temps important pour t'apporter mon aide, mais de ton côté je n'ai pas l'impression qu'il y ait beaucoup d'effort. Pour éviter de perdre davantage de temps, je vais m'arrêter là.

En relisant les différents messages, tu devrais de toute façon disposer des éléments nécessaires à la résolution de ton problème.

Bonne fin de journée

Rechercher des sujets similaires à "formule vba"