Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 13h45   #1
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Par défaut Problème de code : .select

Chers Tous,

J'ai une feuille que je nommerais pour faire dans l'originalité : "Feuil1" !!

Cette dernière est masquée dans mon classeur. Cependant elle contient des données et mon code VBA doit réaliser l'opération ci-dessous :

Code :
1
2
Sheets("Feuil1").Select
            Val1 = [Match(MIN(ABS(1900-(A2:A65536))),ABS(1900-(A2:A65536)),0)] 'Trouve la ligne qui comporte la valeur la plus proche de 1900
Cependant puisque la feuille est masquée, il ne peut pas la sélectionner (logique !). Si je remplace le .select par une boucle with ... end with ça ne fonctionne pas. Est ce que quelqu'un aurait une idée pour éradiquer ce problème

Merci d'avance pour votre aide
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 14h03   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Ne pas faire de Select dans du code !!!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim sh As Worksheet
Dim rg As Range
Dim minVal As Double, ligneProche As Long
Dim c As Range
 
Set sh = Sheets("Feuil1")
Set rg = sh.Range(sh.Range("A2"), sh.Range("A65536").End(xlUp))
 
minVal = Abs(rg.Cells(1, 1).Value - 1900)
ligneProche = 2
For Each c In rg
    If Abs(c.Value - 1900) < minVal Then
        minVal = Abs(c.Value - 1900)
        ligneProche = c.Row
    End If
Next c
Tu pouvais aussi faire :
Code :
Val1 = [Match(MIN(ABS(1900-(Feuil1!A2:A65536))),ABS(1900-(Feuil1!A2:A65536)),0)]
Mais je n'aime pas trop faire des Evaluate, chacun ses goûts
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 14h17   #3
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Je n'ai testé que cette solution

Citation:
Tu pouvais aussi faire :
Code :
Val1 = [Match(MIN(ABS(1900-(Feuil1!A2:A65536))),ABS(1900-(Feuil1!A2:A65536)),0)]
Mais je n'aime pas trop faire des Evaluate, chacun ses goûts
Non pas par esprit de contradiction où que j'ai des gouts radicalement différents , mais elle m'a simplement l'air plus simple à mettre en oeuvre dans mon code !

Merci beaucoup ZebreLoup pour cette solution simple et efficace et surtout qui fonctionne très bien !
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h07.


 
 
 
 
Partenaires

Hébergement Web