Excel - Macro: tenir compte de la dernière ligne d'un tableau

Résolu/Fermé
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 - 5 nov. 2012 à 16:29
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 - 6 nov. 2012 à 16:54
Bonjour,

J'ai une formule en BI qui fonctionne bien sauf que je dois manuellement ajuster la cellule correspondant à la dernière ligne de la colonne A à chaque fois que mon tableau est mis à jours car des données s'ajoutent donc, le numéro de la dernière ligne augmente à chaque fois.

De plus je veux en faire une macro. Je l'aurais enregistrée moi-même si j'avais su composer ma formule pour qu'elle inclus toujours la dernière ligne peut importe le numéro de cette ligne.

La colonne à utiliser comme constante est en A. Les cellules de celle-ci sont toujours remplies.

Explication de ma formule: Il s'agit de faire la somme des montants en AK pour toutes les lignes ayant la même donnée en A (Transit No.). Par exemple, les celulles A7 et A8 sont identiques, donc faire la somme de AK7 + AK8 en BI7. Et ainsi de suite pour les autres.

J'ai mis un fichier échantillon sur cjoint.com

https://www.cjoint.com/?3KfqoLfXA5N

Merci à vous :-)


A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 nov. 2012 à 17:07
tu as plusieurs manières pour trouver la dernière ligne

par ex
Sub derniereligne()
Dim derlig As Integer
derlig = Columns("A").Find("*", , , , , xlPrevious).Row
MsgBox derlig
End Sub

1
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
5 nov. 2012 à 18:01
Oui je connais et je l'ai appliqué pour copier la formule sur chaque cellules de BI. Mais dans la formule elle même, la partie ($A$2:$A$7454;$A2;$AK$2:$AK$7454). Je ne sais pas comment l'écrire pour quelle cherche dans toutes les celulles de la colonne A.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 5/11/2012 à 18:17
si tu connais la réponse, pourquoi poser la question....

sur 7500 lignes (tu ne l'avais indiqué et ca change complètement la manière de résoudre le problème) il te faut utiliser une variable-tableau

les transit n° sont ils toujours regroupés ?

D'autre part la colonne BI est occupée ,

Tu dis...
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
5 nov. 2012 à 18:39
Michel,

C'est certain que si je connaissais la réponse je ne poserais pas la question.

À mon avis le nombre de lignes ne change rien.

Par contre ce qui est important de savoir c'est que les "Transit No." sont toujours regroupés.

Et en BI, la formule qui s'y trouve en ce moment est celle que je veux modifier pour ne pas avoir à changer la dernière cellule de A et de AK. C'est aussi cette formule que je veux appliquer à toute la colonne BI sous forme de macro.

Je ne sais pas comment écrire ma formule de façon à ce quelle regarde toutes les données de la colonne A jusqu'à la dernière ligne sans vraiment savoir quelle sera la dernière ligne du tableau. Pour le moment, la dernière ligne est 7454 mais la semaine prochaine elle aura augmentée d'un nombre inconnu.

Je sais aussi que pour appliquer la formule (une fois que je saurai l'écrire) à toutes les celules de la colonne BI je peux utiliser quelque chose comme ceci:

Range("BI2").Select
derlig = Columns("A").Find("*", , , , , xlPrevious).Row
With Range("BI2")
.FormulaR1C1 =
.AutoFill Destination:=Range("BI2:BI" & derlig)
End With

Ce qu'il me manque c'est ce qui doit suivre: .FormulaR1C1 =

Voilà.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 nov. 2012 à 19:35
OK on verra ça demain à la fraiche
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 nov. 2012 à 23:31
proposition par VBA
Option Explicit

Sub addtionner_par_transit()
Dim Derlig  As Integer, Cptr As Integer
Dim T_transit(), T_ak(), T_out()
Dim somme As Double, ligne As Integer, Ref As Long

'------Initialisations
     Application.ScreenUpdating = False
     Range("BJ2:BJ1000").ClearContents
     'mise en RAM des données et résultats
     Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
     T_transit = Application.Transpose(Range("A2:A" & Derlig).Value)
     T_ak = Application.Transpose(Range("AK2:AK" & Derlig).Value)
     ReDim T_out(1 To Derlig - 1)
     
'------ Calcul des sommes AK par Transit n°
    For Cptr = 1 To UBound(T_transit)
          somme = 0
          ligne = Cptr
          Ref = T_transit(Cptr)
          On Error GoTo fin
          While T_transit(Cptr) = Ref
               somme = somme + T_ak(Cptr)
               Cptr = Cptr + 1
          Wend
          Cptr = Cptr - 1
         'mémorise résultat
          T_out(ligne) = somme
    Next
'------ affichage des sommes par transit n°
fin:
    T_out(ligne) = somme
    Range("BJ2").Resize(UBound(T_out), 1) = Application.Transpose(T_out)

End Sub


maquette:
https://www.cjoint.com/?3KfxFgU0oJi
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 nov. 2012 à 08:23
Bonjour,

En ce qui concerne l'ajout de nouveaux transit, il faudrait savoir comment tu importes ces mises à jour: macros, manuellement ?

si c'est par macros, merci de communiquer le code et si c'est manuellement ,tu le dis, pour éviter de refaire tout le parcours de la colonne A, ce que fait actuellement le code que je t'ai proposé(il faudrait alors inscrire l'ancienne dernière ligne dans une cellule à la fin du code)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
6 nov. 2012 à 16:54
Bonjour Michel,

Mes données sont importées d'un fichier Txt produit par notre système (SAP). Ce fichier contient toutes les données à partir du début de l'année des opération. Ce sont les transactions de chaque semaine qui sont ajoutées hebdomadairement. Donc je ne fait pas qu'ajouter les nouvelles données de la semaine dernière mais plutôt, je crée un nouveau fichier complet.

Je converti le fichier .txt en .xlsm, appête le fichier en suprimant les espaces que SAP ajoute dans les cellules et applique une macro que j'ai bâtie. Cette macro fait de multiples choses au fichier.

Je suis toujours en mode amélioration et/ou ajout pour cette macro. Mon dernier ajout étant en colonne BI et BJ. Sauf que j'accroche à BI en ce moment.

Je n'ai pas eu la chance d'essayer ce que tu a proposé plus tôt. Je dois travailler sur autre chose pour l'instant.

D'ailleurs, je vais soumettre une nouvelle question pour un tout autre fichier. Si le coeur t'en dit.

Merci en core pour ton aide :-)
0