Selectionner l'avant dernière cellule

Résolu/Fermé
Stefzy - 9 déc. 2009 à 16:51
 Stefzy - 10 déc. 2009 à 11:43
Bonjour,

Je souhaiterais créer un programme qui pour une ligne donnée prend la valeur de la première cellule puis celle de l'avant dernière cellule (non vide) et effectue une opération entre les valeurs de ces deux cellules.

Le problème est que je ne connais pas la synthaxe pour désigner l'avant dernière cellule, en clair que dois je ecrire pour affecter la valeur de l'avant dernière cellule non vide de ma ligne A a ma variable x

x=?

Merci beaucoup d'avance

6 réponses

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
10 déc. 2009 à 10:03
bonjour,
a = ActiveCell.Offset(0, -1).Value
1
Raymond PENTIER Messages postés 58396 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 094
9 déc. 2009 à 21:46
Bonjour.

De quel logiciel s'agit-il ?

Quel que soit le logiciel, il n'existe aucune formule ou fonction qui fasse ça.
Il faudrait avoir recours à une macro.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
9 déc. 2009 à 22:34
Bonjour tout le monde,

Si si, c'est faisable par formule.
Ramène la valeur de l'avant dernière cellule remplie de la ligne 1 :
=DECALER(A1;0;GRANDE.VALEUR((1:1<>"")*COLONNE(1:1);2)-1)
formule matricielle à valider par shift+ctrl+entrée (le curseur étant dans la zone d'édition des formules)
eric
0
Ah oui désolé j'avais oublié de spécifier que je codais en en VBA.
Pour tout expliquer voici ce que je voudrais faire:

J'ai un enchainement de ligne qui ne comportent pas forcement le meme nombre de valeurs, ce que je cherche a faire c'est que quand je clique sur la première cellule non vide d'une ligne (exemple C6) le programme aille chercher la valeur de l'avant dernière cellule non vide de cette ligne (exemple C14), qu'il fasse C6-C14 (nous nommerons cette soustraction x) , qu'il divise x par le nombre de cellules entre C6 et C14 (=y) et qu'ensuite il fasse:
C7 = C6- y
C8 = C7-y
C9 = C8-y et ainsi de suite jusqu'a C14
Bien sur j'ai utilisé un exemple mais je cherche a ecrire un programme général qui s'appliquerait a n'importe quelle ligne et de n'importe quelle taille.

Private Sub CommandButton2_Click()
Dim a, b, c, d As Integer

Voici ce que j'ai commencé a écrire:

Dim a b c d as Integer

ActiveCell.Select
Range(Selection, Selection.End(xlToRight)).Select

a = Selection.Cells.Count - 1
b = ActiveCell.Value
c = ? (valeur de l'avant dernière cellule non vide)

d = (b - c)/a ....

Merci d'avance à ceux qui pourront m'aider !
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
10 déc. 2009 à 11:25
Bonjour,
Un petit lien d'abord pour tout ce qui concerne dernière ligne, dernière colonne, nombre de colonnes, de lignes etc... : https://excel.developpez.com/faq/?page=Cellule#DerniereLigneNonVide
Pour avoir l'avant dernière, il faut utiliser effectivement offset(ligne, colonne)
ActiveCell.Offset(-3, 2) "remonte" de 3 lignes et va 2 colonnes à droite de la cellule active
ActiveCell.Offset(0, -1) concerne la cellule située juste à gauche de la cellule active.

L'avant dernière cellule non vide de la 1ère ligne est donc :
AvantDerniereColonne = Range("IV1").End(xlToLeft).Offset(0, -1).Column
L'avant dernière cellule non vide de la 113ère ligne est donc :
AvantDerniereColonne = Range("IV113").End(xlToLeft).Offset(0, -1).Column

Petit détail également :
ActiveCell est la cellule qui est sélectionnée. Inutile donc d'écrire dans le code ActiveCell.Select. Ligne de code inutile et donc à supprimer.
0
Merci a tous
Le programme tourne !
0