[Excel] Comment obtenir la dernière valeur ?

Comment obtenir la dernière valeur ? [Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 29-06-2006 à 15:57:14    

Bonjour,
 
Voilà j'ai un problème ridicule mais qui me bloque catégoriquement dans mon travail.
J'ai une colonne Excel dans laquelle on enregistre des données tous les mois.
Si bien qu'il y a 12 lignes sur cette colonne.
 
Je voudrais obtenir chaque mois, la dernière valeur de cette colonne dans une cellule à part.
En quelque sorte, on a (imaginez une feuille Excel)
 
---------------------------------------------  
 
Janvier :  
 
_____A____B  
1____15____=recherchedernièrevaleurdans (A1-A5)  
2____  
3____  
4____  
5____  
...
 
B1 doit donner 15  
 
---------------------------------------------  
 
Fevrier  
 
_____A____B  
1____15____=recherchedernièrevaleurdans (A1-A5)  
2____21  
3____  
4____  
5____  
...
 
B1 doit donner 21  
 
Etc....  
 
Le problème est que je ne trouve aucune fonction qui me permette de réaliser ceci et j'ai beau les combiner les une aux autres, je n'obtiens aucun résultat.
Donc si vous pouviez m'aider à trouver une solution....par l'intermédiaire d'une fonction (si elle existe) ou d'une maccro VBA (du moins une idée de cette dernière), vous me rendriez un fier service.
 
Si vous avez besoin de plus de précision, n'hésiter pas à me le demander.
 
Merci d'avance.

Reply

Marsh Posté le 29-06-2006 à 15:57:14   

Reply

Marsh Posté le 29-06-2006 à 16:04:17    

si tu ajoutes automatiquement dans le dernier mois, tu peux faire une lecture par le bas, c'est à dire en partant de A12
 
 
For i=1 to 12
If Range("A" & 12-i).Value<>"" and Range("B1" ).value="" then
Range("B1" ).Value=Range("A" & 12-i).Value
End if
Next i

Reply

Marsh Posté le 29-06-2006 à 16:41:59    

D'abord merci Jpcheck de m'avoir fourni une réponse si rapidement.
 
J'ai essayé de suite ce que tu m'as proposé. Cela fonctionne plus ou moins, si l'on met la valeur 13 au lieu de 12 (sinon il ramène l'avant dernière valeur lorsque la liste est complète).
La macro fonctionne donc, mais une erreur apparait quand même.
Cette dernière me dit : "la méthode 'Range' de l'objet '_Worsheet' a échoué"
Et je n'arrive pas à identifier d'où vient le problème....surtout que même avec l'erreur on obtient bien la valeur en B1.
Mais cette erreur est vraiment génante pour moi, d'autant plus que si on applique la macro à un userform/module, elle ne marche plus du tout.
 
En tout cas, merci.
Si on peut m'apporter les corrections nécéssaires, je vous en remercierais grandement.
De mon coté, je continue de chercher.
 
Merci encore.

Reply

Marsh Posté le 29-06-2006 à 16:52:59    

mets avant la boucle for
worksheet(0).activate par exemple,
j'entends par là qu'il te faut activer ta feuille de travail avant de mettre les range en action.

Reply

Marsh Posté le 30-06-2006 à 09:27:37    

Ok.
J'ai essayer de place le worksheet.activate, mais cela n'a pas fonctionné.
Comme la macro fontionne quand même...j'ai ajouté un "on error resume next" pour faire disparaitre l'erreur.
Maintenant elle fonctionne correctement.
Voilà donc la macro :
 
Sub a()
On Error Resume Next
Range("B1" ).Clear
For i = 1 To 13
If Range("A" & 13 - i).Value <> "" And Range("B1" ).Value = "" Then
Range("B1" ).Value = Range("A" & 13 - i).Value
End If
Next i
End Sub

 
Merci Jpcheck de ton aide !
Je pense que je devrais m'en sortir avec une macro de ce type.
Par contre...je pensais vraiment qu'Excel avec une fonction (ou une combinaison de fonction) qui m'aurait permis d'obtenir la dernière valeur d'une plage de cellule selectionnée dans la même colonne.
Enfin...
Merci encore  :)


Message édité par jfox le 30-06-2006 à 09:28:39
Reply

Marsh Posté le 30-06-2006 à 09:30:24    

Ton erreur vient du fait que i peut être égal à 13 et donc à la dernière boucle le range est "A0" et ca il aime pas du tout

Reply

Marsh Posté le 30-06-2006 à 09:36:06    

j'avais plus court en fait ^^
range("B1" ).value = Sheets("feuil1" ).Range("a65536" ).End(xlUp).Row.value
j'ai fait le .value à droite à l'arrache, mais sans tu obtiens ta premiere case en partant du bas non vide.

Reply

Marsh Posté le 30-06-2006 à 09:57:09    

@Jpcheck
Oui ca aurait pu le faire, sauf que il y a d'autres informations différentes dans les lignes en dessous de A12.
Donc en partant de tout en bas, on tomberai sur une première valeur par exemple en A152.
Donc la première idée me convient mieux  ;)  
Merci en tout cas  :)  
 
@Paul Hood
Oki je vais vérifié ça.
Si c'est bien l'erreur je reviendrai éditer le message.
Merci  :)
 
Edit c'était bien le "13" l'erreur.
Donc au final la macro marche très bien comme ça :
 
Sub a()  
Range("B1" ).Clear  
For i = 1 To 12  
If Range("A" & 13 - i).Value <> "" And Range("B1" ).Value = "" Then  
Range("B1" ).Value = Range("A" & 13 - i).Value  
End If  
Next i  
End Sub

 
Bien joué  ;)


Message édité par jfox le 30-06-2006 à 10:21:19
Reply

Marsh Posté le 30-06-2006 à 09:58:16    

range("B1" ).value = Sheets("feuil1" ).Range("a13" ).End(xlUp).Row.value  alors...

Reply

Marsh Posté le 30-06-2006 à 10:01:52    

Tu peux partir du haut et descendre
range("B1" ).value = Sheets("feuil1" ).Range("a1" ).End(xldown).value

Reply

Marsh Posté le 30-06-2006 à 10:01:52   

Reply

Marsh Posté le 30-06-2006 à 10:12:38    

@Jpcheck
Ah oui....tout bétement.  :sweat:  
Désolé, je suis assez limité dans mon cas, niveau VBA.
Par contre dans ce que tu m'as donnée, il faut enlevé le "Row" qui se trouve en avant dernier.
Sinon ca ne fonctionne pas.
 
@Paul hood
Oui ca marche aussi comme ça, mais je prefère partir du bas en y réfléchissant. Ca m'arrange par rapport à mon vrai fichier (où on est en plein milieu de la feuille, où le A1 correspond à F213 et où il y a beaucoup de données autour ;) )
 
En tout cas merci à tous les deux !
Les dernieres lignes sont niquel, et je pense que je devrais m'en sortir avec ça.
(Si j'arrive à faire lancer ma macro à l'ouverture du fichier....Mais c'est un autre problème  ;) )
 
Merci encore.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed