selection de cellules precedente a un repere

T

tom

Guest
bonsoir

j'ai encore besoin d'aide, comme d'hab..............

je dois selectionner les valeurs qui se trouve juste avant un repere, je donne un exemple

le repere s'est 50

j'ai deux colonne a et b avec des nombres, dans B a chaque fois que je trouve 50 (ex b123) je dois selectionner a 122et b122 et ainsi de suite

le tout en vba pour que je puisse l'incorporer a ma macro d'importation

si quelqu'un a une idée sur la methode a employer merci du coup de main

A+
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir tom, le Forum,

Si j'ai bien compris la question, tu peux essayer ce code :
Sub Traitement()
Dim C As Range
Dim Dep As String
      With Sheets('Feuil1').Columns(2)
            Set C = .Find(50, LookIn:=xlValues)
            If Not C Is Nothing Then
                  Dep = C.Address
                  Do
                        Range(C.Offset(-1, -1), C.Offset(-1, 0)).Select
                        '
                        ' TON CODE ICI...
                        MsgBox 'Valeur 50 trouvée en : ' & C.Address
                        '
                        Set C = .FindNext(C)
                  Loop While Not C Is Nothing And C.Address <> Dep
            End If
      End With
End Sub
Cordialement,
 
T

tom

Guest
bonjour mydearfriend

ton code fonctionne tres bien mais je vient de me rendre compte que la variabilité des données pose probleme et donc mon repere qui a l'origine est 50 peux etre 52 donc je rate des valeurs

j'ai peut etre pas pris le probleme dans le bon sens, a la base je cherche la valeur juste avant le passage à 50 et à 100 le probleme est que je passe 48 à 52 comme 49.98 à 50.02 idem pour le 100.
donc je rate des valeurs facilement

bon voila c'est un peu raide comme probleme pour un dimanche

encore merci pour le coup de main
 

myDearFriend!

XLDnaute Barbatruc
Bonjour tom, le Forum.

Lorsque j'ai vu ta première question, ça semblait clair... par contre, cette fois, la situation est plus que nébuleuse...

- Quel est le problème exactement ?
- Visiblement, les valeurs sont changeantes... comment se fait le passage de 48 à 52 ou de 49,98 à 52,02 ? Le pas est-il constant ? Quel est l'évènement qui déclenche ce passage ?
- Doit-on considérer que le repère correspond à la plus grande valeur approchant 50 mais sans la dépasser ? Qu'en est-il pour la valeur 100 ?

Comme tu peux t'en douter, tes quelques lignes ne permettent pas de comprendre pleinement le problème vu de l'extérieur...

Je ne puis donc que te conseiller d'analyser la situation, de cibler exactement le résultat escompté et de revenir nous exposer ton souhait...peut-être te faudrait-il Lien supprimé exemple du problème (épuré des données inutiles ou confidentielles bien-sûr)...

Cordialement,
 
T

tom

Guest
re-bonjour

dans le fichier en piece jointe j'ai fait la manipulation a la main le repere et la cible sont de couleurs differentes
en plus d'apres mes multiples essais je pense qu'il faut faire tourner la boucle du bas vers le haut

pour repondre a tes questions:

le fichier est une acquisition de données environ 4000 à 5000 lignes
le pas n'est pas constant
oui la cible est la plus grande valeur avant 50 et avant 100 mais en allant du bas vers le haut

voila j'espere avoir ete plus clair

A+
[file name=exemple_20050918152821.zip size=10541]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/exemple_20050918152821.zip[/file]
 

Pièces jointes

  • exemple_20050918152821.zip
    10.3 KB · Affichages: 16

myDearFriend!

XLDnaute Barbatruc
Re tom,

Vraissemblablement, tout n'est pas encore très clair dans tout ça...

- Il convenait de trouver un 'repère' et de sélectionner la ligne placée juste au dessus : visiblement ça a changé puisque dans ton exemple, ça ne se vérifie plus en lignes : 231, 295 et 360.
- Je n'ai sans doute pas tout suivi car je ne comprends pas pourquoi tu ne tiens pas compte des lignes : 243, 306 et 371.

Cela dit, j'ai essayé de reproduire autant que possible ton raisonnement dans ton exemple ci-joint modifié... Cependant, pour réaliser cette macro, j'ai abandonné le principe du 'repère' au bénéfice d'un principe de 'tranche' qui me paraissait bien plus simple à mettre en oeuvre par VBA, le résultat obtenu étant apparamment le même...

J'ai utilisé la procédure suivante :
Sub Traitement()
Dim TabTemp As Variant
Dim
L As Long
Dim
V As Byte, AncV As Byte
      With Sheets('Feuil1')
            'Charge les données dans un tableau variant temporaire pour
            'accélérer le traitement
            L = .Range('B65536').End(xlUp).Row
            TabTemp = .Range(.Cells(1, 1), .Cells(L, 2)).Value
            AncV = 0
            For L = 1 To UBound(TabTemp, 1)
                  Select Case TabTemp(L, 2)
                  Case Is < 50
                        V = 0
                  Case Is < 100
                        V = 1
                  Case Else
                        V = 2
                  End Select
                  'Si changement de 'tranche'
                  If AncV < V Then
                        .Range(.Cells(L - 1, 1), .Cells(L - 1, 2)).Interior.ColorIndex = 4
                  End If
                  AncV = V
            Next L
      End With
      MsgBox 'Traitement terminé ! Les cibles sont surlignées en VERT.'
End Sub
Cordialement, [file name=PourTom.zip size=15484]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PourTom.zip[/file]
 

Pièces jointes

  • PourTom.zip
    15.1 KB · Affichages: 20

ChTi160

XLDnaute Barbatruc
Salut tom
Bonsoir Didier
Didier tu vas dire (mais tu sais moi je copie et étudie tout ce que tu fais
alors je me permet une question
n'y a t'il pas une erreur pour ce qui est de la colonne du tableau
For L = 1 To UBound(TabTemp, 1)
Select Case TabTemp(L,2)au lieu de 1
Case Is < 50

a moins que je me trompe mais tu m'en escuseras j'en suis sûr

bonne Fin de Soirée
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Jean-Marie (ChTi160),

Pas de problème Jean-Marie, tu es tout excusé... mais tu te trompes, car c'est bien :
For L = 1 To UBound(TabTemp, 1)
                          Select Case TabTemp(L, 2)
                          Case Is < 50
                              ...
                              ...
                              ...
Si tu ouvres l'exemple joint dans le post, tu t'apercevras que les valeurs testées sont celles de la 2ème colonne (colonne B )... ;)

Bonne soirée et à bientôt.
 

ChTi160

XLDnaute Barbatruc
Arfff Excuse
effectivement
lorsque j'ai changé la Valeur 2 en 1 j'ai vu que les valeurs de la colonne 1 et 2 étaient colorées donc pour moi c'était ça. mais je n'étais pas aller assez bas dans la liste lors de mon premier essai
Ok et Merci

Amicalement
Jean Marie
 
T

TOM

Guest
Bonjour mydearfriend, et chti160

desolé pour la reponse un peu tardive mais j'ai perdu la connexion hier soir

le code fonctionne tres bien avec le principe des tranches, et je vais en rester là

par ailleurs je voulais remercier mydearfriend et toutes les personnes qui mon aidé sur ce forum.

A+
 

Discussions similaires

Réponses
5
Affichages
566

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia