base de données - sélection d'une hypothèse

ogle

XLDnaute Nouveau
base de données - sélection d'une hypothèse [résolu]

Bonjour le forum,

Une petite question qui ne vous prendra pas bcp de temps :)

Voici la problématique
: J’ai un montant de dépenses pour l’année 2007. Je veux faire évoluer ce montant en 2008 selon une hypothèse bien précise. Cette hypothèse est entreposée dans une petite base de données avec d’autres hypothèses. L’hypothèse est amenée à évoluer dans le temps. Souhaitant garder une trace du passé, je n’écrase pas l’ancienne hypothèse mais j’ajoute une ligne dans la base de données. Je veux alors que le montant pour 2008 prenne en compte automatiquement la dernière hypothèse disponible.

Dans le fichier ci-joint j’ai :
Un montant de 100 en 2007
un jeu de 2 hypothèses A et B
Je veux calculer le montant 2008 à partir de l’hypothèse A
A a été mise 4 fois à jour et B 2 fois.
Quand j’ajoute une cinquième hypothèse pour A (par exemple 2%), j’aimerais que le montant 2008 évolue selon ce dernier chiffre automatiquement.

Merci à tous pour votre aide si précieuse !! :)
Og
 

Pièces jointes

  • Sélection dernière hypothèse.zip
    2.7 KB · Affichages: 17
Dernière édition:

Kotov

XLDnaute Impliqué
Re : base de données - sélection d'une hypothèse

Bonsoir Ogle,

Voici une solution en VBA :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n&, i&
On Error Resume Next
n = Cells(65536, 1).End(3).Row
For i = n To 2 Step -1
    If Cells(n, 1) = "A" Then Cells(24, 5) = Cells(24, 4) * Cells(n, 3): Exit Sub
Next i
End Sub
------------
Quelques explications :
Une macro évènementielle qui se lance automatiquement à chaque changement de cellule (on peut également envisager une macro qui se lance à chaque calcul)
Déclaration de 2 variables Integer (n = nbre de lignes et i = variable pour une boucle)
On Error Resume Next pour éviter de bloquer en cas d'erreur
n se voit attribuer la valeur de la dernière ligne "écrite" de la colonne A
Ensuite, il suffit de faire une boucle qui cherche la première valeur "A" en remontant une à une les lignes par le bas .
Quand elle la trouve, elle effectue ton calcul et quitte la macro
----------------
Dans l'hypothèse où tu ne connais pas VBA, tu trouveras cette macro dans l'éditeur VBE en faisant ALT+F11. Cliques alors sur le nom de ta feuille dans VBA Project
Je te joins ton fichier

Bonne soirée
Kotov
 

Pièces jointes

  • Sélection dernière hypothèse.xls
    30 KB · Affichages: 45
Dernière édition:

ogle

XLDnaute Nouveau
Re : base de données - sélection d'une hypothèse [résolu]

Après lecture de la macro qui marche très bien, j'ai juste une petite question sur la définition de la variable n :
Code:
n = Cells(65536, 1).End(3).Row
Je comprends que :
  • Cells(65536, 1) représente la dernière cellule de la colonne 1,
  • Row permet de sélectionner le numéro de ligne,
  • mais je ne comprends pas End(3). Que veut dire 3 ici ? C'est un balayage ?

[J'ai finalement compris en testant le code. Le 3 permet de diriger le balayage vers le haut jusqu'à la première case non vide]


Merci à tous ! :eek:
 
Dernière édition:

Kotov

XLDnaute Impliqué
Re : base de données - sélection d'une hypothèse

Bonsoir Ogle,

Effectivement, tu as bien compris,le 3 dirige le balayage vers le haut.
Désolé de t'avoir fait chercher, d'autant que ce "3" n'est qu'un raccourci non officiel qui remplace "xlUp"

Si j'utilise fréquemment ce raccourci dans mes macros persos, je ne devrais pas l'utiliser quand je réponds à une demande sur XLD.

Voici les valeurs officiellement reconnues pour se déplacer
Exemple de déplacements à partir de la cellule J8 (Cells(8,10)), chacune des lignes étant valable.
Code:
 Déplacement vers la gauche : xlToLeft = -4159 = &HFFFFEFC1
     n = Cells(8, 10).End(xlToLeft).Column    
ou n = Cells(8, 10).End(-4159).Column
ou n = Cells(8, 10).End(&HFFFFEFC1).Column


Déplacement vers la gauche :  xlToRight = -4161 = &HFFFFEFBF
     n = Cells(8, 10).End(xlToRight).Column    
ou n = Cells(8, 10).End(-4161).Column
ou n = Cells(8 10).End(&HFFFFEFBF).Column


Déplacement vers le haut :  xlUp = -4162 = &HFFFFEFBE
     n = Cells(8, 10).End(xlUp).Row    
ou n = Cells(8, 10).End(-4162).Row
ou n = Cells(8, 10).End(&HFFFFEFBE).Row


Déplacement vers le Bas:  xlDown = -4121 = &HFFFFEFE7
     n = Cells(8, 10).End(xlDown).Row    
ou n = Cells(8, 10).End(-4121).Row
ou n = Cells(8, 10).End(&HFFFFEFE7).Row
Avec ces 4 options, il est extrêment facile de se déplacer dans n'importe quelle cellule pour peu qu'elle existe :
Versions Excel antérieures à Excel2007 : 65536 lignes, 256 colonnes
Excel 2007 : 1048576 lignes, 16384 colonnes


Bonne soirée
Kotov
 

Discussions similaires

Statistiques des forums

Discussions
312 412
Messages
2 088 196
Membres
103 763
dernier inscrit
p.michaux