Microsoft 365 Remplacer référence ligne absolue par lastrow dans ActiveCell.Formula2 = "=SUM(R[-90]C:R[-1]C)"

Aloha

XLDnaute Accro
Bonjour,
En-dessous d'un tableau à longeur variable je voudrais mettre des totaux.
L'enregistreur m'a donné:

VB:
Range("F" & lastrowA + 1).Select
ActiveCell.Formula2 = "=SUM(R[-90]C:R[-1]C)"

En fait je voudrais aditionner les cellules F6 à F & lastrow
Comment faire?

Question subsidiaire: quelle est la signification de Formula2?
Bien à vous
Aloha
 

Aloha

XLDnaute Accro
Bonjour "Fred0o" et "Dranreb",
C'est exactement ça! Merci beaucoup!
En fait, c'est simple...à condition de savoir comment faire ;)

Autre petit problème survenu après:
si je veux formater le total de sorte que les milliers soient séparés, j'ai le résultat à voir dans la copie d'écran ci -annexée, avec le code:
VB:
 Range("F" & lastrowA + 1).Select
 Selection.NumberFormat = "#.##0.0"
Bizarre
 

Pièces jointes

  • Formatage du total.JPG
    Formatage du total.JPG
    12.1 KB · Affichages: 14

Aloha

XLDnaute Accro
OK, je vois, il fallait une virgule au lieu d'un point pour séparer les milliers.
Seulement, ce n'est pas moi qui ai mis le point, c'est l'enregistreur himself!
Comment est-ce possible?

Qui plus est, le résultat est malgré tout un point autant pour séparer les milliers que pour les décimales!

Ultime question: comme certaines données ne sont plus disponibles puisqu'effacées, je voudrais remplacer les #N/A qui s'en suivent par un texte comme "Données personnelles indisponibles" et réduire la taille des caractères de police de ces cellules à un minimum pour que le texte ne déborde pas.
 

Pièces jointes

  • Formatage du total.JPG
    Formatage du total.JPG
    10.5 KB · Affichages: 2
  • Remplacer les NA.xlsm
    160.7 KB · Affichages: 5
Dernière édition:

Aloha

XLDnaute Accro
Bonjour,
Voici une autre formule que je n'arrive pas à adapter de sorte qu'elle s'étende jusqu'à la dernière cellule en A contenant une valeur (lastrowA):
VB:
    Range("G6").Select
    ActiveCell.Formula2R1C1 = _
     "=SUMPRODUCT((Feuil1!R4C2:R100000C2='Feuille nouv.'!RC1)*(Feuil1!R4C4:R100000C27=""B""))"
Je veux donc remplacer la ligne 100 000 par lastrowA
Merci d'avance pour toute aide
Aloha
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ce genre de plage devrait se mettre sous forme de tableau pour pouvoir utiliser les références structurées en guise de paramètres.
Sinon, si vous avez les Range sous la main vous pouvez en prendre, à concaténer : .Address(True, True, xlR1C1, True)
Et évitez les '.Select : ActiveCell.', juste un '.' suffit. Range("G6").Formula2R1C1 = etc.
 
Dernière édition:

Aloha

XLDnaute Accro
Ce genre de plage devrait se mettre sous forme de tableau pour pouvoir utiliser les références structurées en guise de paramètres.
Sinon, si vous avez les Range sous la main vous pouvez en prendre, à concaténer : .Address(True, True, xlR1C1, True)
Et évitez les '.Select : ActiveCell.', juste un '.' suffit. Range("G6").Formula2R1C1 = etc.
Cela dépasse hélas mes capacités.
J'avais espéré que mes formules se calculeraient plus rapidement si je n'allais pas jusqu'à la ligne 100000 mais seulement jusqu'à la dernière ligne avec valeurs, mais en réalité il n'y a pas beaucoup de gain de temps.
La méthode que vous esquissez là est sûrement plus rapide!

@"Fred0o":
Cela fonctionne parfaitement. Merci!
En réalité c'est tout simple à ce que je vois.
 

Aloha

XLDnaute Accro
Bonsoir,
Une variante:
Je viens de constater qu'il peut arriver que les valeurs dans A s'étendent sur moins de lignes que d'autres colonnes.
Comment remplacer dans le code la dernière ligne en A avec zune valeur par la dernière ligne de la colonne qui comprend le plus de lignes.
Bonne nuit
 

Pièces jointes

  • Dernière ligne contenant une valeur.xlsm
    10.3 KB · Affichages: 7

Fred0o

XLDnaute Barbatruc
Bonjour Aloha, Dranreb

A tester et adapter en fonction de ta vraie base de données :
VB:
    lastrowA = Range("A1:E65536").SpecialCells(xlCellTypeLastCell).Row - 1
    Range("G6").Select
    ActiveCell.Formula2R1C1 = "=SUMPRODUCT((Feuil1!R4C2:R" & lastrowA & "C2='Feuille nouv.'!RC1)*(Feuil1!R4C4:R" & lastrowA & "C27=""B""))"
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
il faudra quand même m'expliquer a quoi ça sert d'envoyer une formule avec lastrow dynamique
ça n'a pas de sens car a la prochaine ligne ajoutée il faudra la refaire
alors pourquoi demander le calcul par formule au tant le faire en vba

;)
 

Aloha

XLDnaute Accro
bonjour a tous
il faudra quand même m'expliquer a quoi ça sert d'envoyer une formule avec lastrow dynamique
ça n'a pas de sens car a la prochaine ligne ajoutée il faudra la refaire
alors pourquoi demander le calcul par formule au tant le faire en vba

;)
Bonjour,
J'ai constaté des situations, dues peut-être à mes essais, mais je n'en suis pas sûr, où la dernière cellule occupée ne se trouvait pas en A, lorsque la macro devait commencer par effacer les données d'un tableau pour céder la place à de nouvelles données.
Ce qui n'est pas clair pour moi, avec mes maigres connaissances en VBA, qui ne me permettent que des enregistrements et du petit bricolage: si, au début de la macro, lastrowA est définie comme la ligne X, et que des données sont ajoutées, si j'utilise encore lastrowA plus bas dans la macro, la valeur de lastrowA reste toujours la ligne X ou si elle s'adapte à la nouvelle situation.

@"Fred0o":
cela fonctionne, merci, mais il faut que j'enlève le -1, sinon j'atterris une ligne en dessous des données.
Bonne journée
Aloha
 

Statistiques des forums

Discussions
312 310
Messages
2 087 120
Membres
103 479
dernier inscrit
Compta