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

  • Initiateur de la discussion Initiateur de la discussion ogle
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

O

ogle

Guest
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

Dernière modification par un modérateur:
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

Dernière édition:
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 ! 😱
 
Dernière modification par un modérateur:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
700
Réponses
15
Affichages
844
Réponses
15
Affichages
2 K
Retour