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 SubCi-joint le fichier.
Auriez-vous une idée ? Merci.
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 SubRemarques :
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