Recherche valeur puis calcul

Bonjour le forum, voici mon problème :

J'ai une feuille "Echéance" sur laquelle il y a un tableau avec mes échéances.

J'ai une feuille "Configuration" sur laquelle se trouve un tableau avec en colonne A le nom du compte et en colonne B le solde de celui-ci.

Ce que je cherche à faire c'est que lorsque (sur la feuille Echéance) je clic sur le bouton "Valider", si la date de la prochaine échéance (colonne F) est inférieur ou égal à aujourd'hui, alors il recherche le compte à débiter (colonne F) sur la feuille "Configuration" colonne A et qu'il me fasse l'addition ou la soustraction avec le montant de l'échéance.

Voici le bout de code qui se trouve déjà dans la macro du bouton:

Sub Rectangle1_Cliquer()

Dim DernLigne As Long
DernLigne = Sheets("Echéance").Range("B7").End(xlDown).Row
Dim i As Integer
Dim LaDate, echeance

For i = 7 To DernLigne
    If Sheets("Echéance").Range("F" & i).Value <= Now() Then

      LaDate = Sheets("Echéance").Range("F" & i).Value
      echeance = DateAdd("m", 1, CDate(LaDate))
      Sheets("Echéance").Range("F" & i).Value = echeance

    End If
Next
End Sub

Ci-joint le fichier.

Auriez-vous une idée ? Merci.

13maj-echeance.xlsm (20.18 Ko)

Bonjour,

Sub Calculer()
    Dim i As Integer, n As Integer, ech, cc(), imput()
    With [Tableau9]
        ReDim cc(1 To .Rows.Count)
        For i = 1 To .Rows.Count
            cc(i) = .Cells(i, 1)
        Next i
    End With
    With [Tableau8]
        For i = 1 To .Rows.Count
            If .Cells(i, 5) < Date Then
                ReDim Preserve imput(1, n)
                imput(0, n) = .Cells(i, 7): imput(1, n) = .Cells(i, 4)
                n = n + 1
                ech = DateAdd("m", 1, .Cells(i, 5))
                .Cells(i, 5) = ech
            End If
        Next i
    End With
    If n > 0 Then
        For i = 0 To UBound(imput, 2)
            imput(0, i) = WorksheetFunction.Match(imput(0, i), cc, 0)
        Next i
        With [Tableau9]
            For i = 0 To UBound(imput, 2)
                .Cells(imput(0, i), 2) = .Cells(imput(0, i), 2) + imput(1, i)
            Next i
        End With
    End If
End Sub

Remarques :

Tu peux ou non utiliser des Tableaux Excel, à ta convenance, mais si tu en utilises il serait dommage et absurde de ne pas utiliser les avantages qu'ils peuvent procurer !

Au cas particulier, Excel introduit automatiquement un nom pour ces tableaux. Ce nom correspond à la partie Données du tableau très exactement. Et ce nom est utilisable en VBA. Il permet donc de se désintéresser de la feuille, de la recherche de ligne, pour cibler directement le tableau.

Par ailleurs une indentation correcte du code laisse l'alignement entre Sub et End Sub dégagé (alignement de base en retrait pour le code, ne vont à la marge sans retrait que les étiquettes éventuelles de branchement (ce qui permet de les repérer au premier coup d'oeil)). Variante admissible : les déclarations de variables sans retrait (je ne pratique pas mais c'est une option admissible). Ces déclarations doivent de toute façon se trouver toutes en tête de procédure, sans mélange avec du code exécutable.

Integer s'étend jusqu'à 32767... donc tant qu'il est exclu de dépasser ce nombre, inutile de déclarer une variable Long ! (une variable Integer sera plus rapide à l'exécution).

Enfin, avant de tester, il convient que tu corriges une erreur de ton tableau : LEP Epargne n'existe pas dans la liste des Comptes ! Pour éviter ce type de problème, tu devrais mettre la colonne Compte de Echéance sous liste déroulante.

Cordialement.

Un grand merci à toi MFerrand, impressionnant, même si je comprend pas tout

Pour ce qui est des comptes qui n'existent pas ,c 'est parce qu'il n'y avait pas toute la liste sur la feuille, sinon les comptes sont rentrés par liste combobox sur userform donc pas de problème.

Encore un grand merci pour ton aide et toutes tes remarques précieuses qui me font découvrir toutes les subtilités d'excel.

Cordialement

Benoist

Rechercher des sujets similaires à "recherche valeur puis calcul"