Comparer les deux dernières cellules d'une ligne

(Re)Bonjour le forum !

Mon petit problème du jour est de comparer les deux dernières cellules d'un tableau. Ca serait simple si ces plages étaient fixes mais ce n'est pas le cas... Régulièrement mon tableau comportera une colonne de plus, et donc le résultat de la comparaison sera susceptible de changer.

J'ai plusieurs plages mais dans le fichier que je vous envoie je j'ai restreint leur périmètre (j'ai réutilisé un fichier pour un post précédent). Pour chaque ligne, je souhaite indiquer en C le résultat du calcul "dernière cellule - avant dernière cellule". Pour la suite je saurai me débrouiller toute seule...

20mareelo54.xlsm (16.97 Ko)

En vous remerciant pour cette ultime macro avant la fin de mon stage...

Salut

Sub try()
Application.ScreenUpdating = False
Dim derLig As Long
Dim derCol As Integer

With Sheets("Historique synthèse")
    derLig = .Range("A" & Rows.Count).End(xlUp).Row
    For a = 5 To derLig
        derCol = .Cells(a, Columns.Count).End(xlToLeft).Column
        If Not IsEmpty(.Cells(a, derCol)) Then .Cells(a, "C") = .Cells(a, derCol) - .Cells(a, derCol - 1)
    Next a
End With
End Sub

Bonjour Game Over !

J'ai testé mais ça ne fonctionne pas . Ca me met comme message d'erreur "Erreur compilation : Variable non définie" sur la valeur "a"...

Par ailleurs j'ai ajouté un petit Application.ScreenUpdating = True à la fin (un oubli ? c'est la seule chose que je peux corriger toute seule^^)

L'erreur, c'est sans doute parce que tu as l'option explicit par défaut... donc on déclare également la variable a, dans ce cas là :

Sub try()
Application.ScreenUpdating = False
Dim derLig As Long, a As Long
Dim derCol As Integer

With Sheets("Historique synthèse")
    derLig = .Range("A" & Rows.Count).End(xlUp).Row
    For a = 5 To derLig
        derCol = .Cells(a, Columns.Count).End(xlToLeft).Column
        If Not IsEmpty(.Cells(a, derCol)) Then .Cells(a, "C") = .Cells(a, derCol) - .Cells(a, derCol - 1)
    Next a
End With
End Sub

Application.ScreenUpdating = True n'est pas nécessaire car cette commande redevient automatiquement vraie à la find de ton programme.

Autant pour moi pour application.screenupdating... J'ai toujours crus qu'après une "False" il fallait un "True"

Ca fonctionne sur mon petit fichier test, je transpose ça dans mon fichier de travail et je signale le topic comme résolu

Bigre, ça ne fonctionne pas ! Pourtant j'ai cherché les différences entre les deux fichiers et je ne le trouve pas ce que je peux modifier...

Je mets juste l'onglet de mon fichier qui concerne cette macro, en espérant qu'il soit possible de faire quelque chose...

17essai-mareelo.xlsm (62.42 Ko)

Essaye comme ça, la macro ne "gérait pas" les lignes n'ayant que le titre en gras et pas suivi de colonnes de nombres.

Sub try()
Application.ScreenUpdating = False
Dim derLig As Long, a As Long
Dim derCol As Integer

With Sheets("Historique synthèse")
    derLig = .Range("A" & Rows.Count).End(xlUp).Row
    For a = 6 To derLig
        derCol = .Cells(a, Columns.Count).End(xlToLeft).Column
        If Not IsEmpty(.Cells(a, derCol)) And derCol > 1 Then .Cells(a, "C") = .Cells(a, derCol) - .Cells(a, derCol - 1)
    Next a
End With
End Sub

Tip Top ! Ca fonctionne !

Merci beaucoup

Rechercher des sujets similaires à "comparer deux dernieres ligne"