Probleme avec la fonction FIND

Résolu
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007 - 30 août 2007 à 12:39
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007 - 30 août 2007 à 16:19
bonjour.


j'ai deux feuilles: feuille1 (avec toutes les données) et feuille2 (feuille vide dans laquelle je vais insérés certaines données en m'appuyant de la feuille1).


voici comment est composé la feuille 1:
colonne1: dates, colonne 2: codes clients, colonne 3: types , colonne 4 à colonne 9: valeurs


voici comment est composé la feuille 2:
colonne1: codes clients, ligne 2: dates de la période d'etude

ce que j'aimerais faire:
mettre dans chaque cases du tableau de la feuille2 (ayant en vertical le code clien et en horizontal les date) la somme correspondante: la somme des valeurs des colonnes 4 à 9 de la feuille1.

voila le procédé :
on a le code client et la date dans la feuille 2.
on cherche la ligne de la feuille 1 qui a le bon code client, la bone date, le type "SC" , et on
met dans la feuille2, a l'intersection du code client et de la date, la somme des valeurs.

j'ai l'impression de ne pas etre clair...
je vous met mon code ( qui ne marche pas, je ne sais pas pourquoi!  ) :

Dim id_cherche As String
Dim date_cherche As Date
Dim ligne As Integer
Dim colonne As Integer
Dim Derlig As Integer
Dim DerCol As Integer
Dim DerCell_NonVide As String
Dim Type_Cherche As String


Derlig = Range("A65535").End(xlUp).Row
DerCol = Range("A" & Derlig).End(xlToRight).Column
DerCell_NonVide = Cells(Derlig, DerCol).Address()


For i = 2 To Derlig
id_cherche = feuille1.Cells(i, 3)
date_cherche = feuille1.Cells(i, 1)
'Type_Cherche = feuille1.Cells(i, 2)


Set Tt = feuille1.Range("B1" & ":" & "B" & Derlig).Find("SC", LookIn:=xlValues)


With feuille2.Range("A1" & ":" & DerCell_NonVide)


     Set C = .Find(id_cherche, LookIn:=xlValues)
     Set d = .Find(date_cherche, LookIn:=xlValues)
   ' Set Tt = .Find("SC", LookIn:=xlValues)
   
    If (Not C Is Nothing) Then
        firstAddress = C.Address
        Do
            If (Not C Is Nothing) And (Not d Is Nothing) And (Not Tt Is Nothing) Then
            ligne = C.Row
            colonne = d.Column


            feuille2.Cells(ligne, colonne) = Application.WorksheetFunction.Sum(feuille1.Range("D" & i & ":" & "I" & i & ""))
            Set C = .FindNext(C)
            Set d = .FindNext(d)
            End If
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If


End With


Next i

si quelqu'un a une solution, pleaseeeeeeee help me !

thanks!

Monaldinho.

 faites comme moi, éssayer d'éviter le coté obscur de la force

5 réponses

monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007
30 août 2007 à 16:14
arg...


escuse moi, il est vrai, c'est pluto colone1: date, colonne2: type et colone3: code client.


j'ecris feuille1 parce ke j'ai déclaré la feuille o debut de mon code.


je suis dsl de pas avoir été assez complet.


j'ai vu que ca marché seulement quand je mettait toute les dates en periode d'etude.
jai testé le code en triant la feuille1 par "type" et ca à l'air de marché...
j'ai les bon resulats. voici le code : ( en rouge ce que j'ai ajouté par rapport au précédent ) :

Trier_Par_Type_Operation            'procedure qui trie les données par rapport au type


Dim id_cherche As String
Dim Date_Cherche As Date
Dim ligne As Integer
Dim colonne As Integer
Dim Derlig As Integer
Dim DerCol As Integer
Dim DerCell_NonVide As String
Dim Type_Cherche As String


Derlig = Range("A65535").End(xlUp).Row
DerCol = Range("A" & Derlig).End(xlToRight).Column
DerCell_NonVide = Cells(Derlig, DerCol).Address()


For i = 2 To Derlig
id_cherche = feuille1.Cells(i, 3)
Date_Cherche = feuille1.Cells(i, 1)


Set Tt = feuille1.Range("B1" & ":" & "B" & Derlig).Find("SC", LookIn:=xlValues)
 
With feuille2.Range("A1" & ":" & DerCell_NonVide)
 
     Set C = .Find(id_cherche, LookIn:=xlValues)
     Set d = .Find(Date_Cherche, LookIn:=xlValues)
   
    If (Not C Is Nothing) And (Not d Is Nothing) Then
        firstAddress = C.Address
        secondAddress = d.Address
        Do
            If (Not C Is Nothing) And (Not d Is Nothing) And (Not Tt Is Nothing) Then
            ligne = C.Row
            colonne = d.Column
  'MsgBox "bo goss"
            feuille2.Cells(ligne, colonne) = Application.WorksheetFunction.Sum(feuille1.Range("D" & i & ":" & "I" & i & ""))
            Set C = .FindNext(C)
            Set d = .FindNext(d)
            End If
        Loop While Not C Is Nothing And C.Address <> firstAddress And d.Address <> secondAddress
    End If
 
End With
 
Next i



Trier_Par_Date                            'procedure qui trie par rapport à la date




j'ai decouvert cette fonction hier, et c'est hyper pratique... quand on la maitrise! lol
faut que j'affine un peu mon code, car c'est pas encore top...

en tout cas merci beaucoup de ton aide tubafat!!!


c'est super cool de ta part !


 


Monaldinho.

 faites comme moi, éssayer d'éviter le coté obscur de la force
3
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
30 août 2007 à 14:48
Salut, quand tu dis que ton code ne marche pas, qu'est ce qui ne marche pas?
As-tu un message d'erreur? Ou juste ça ne fait pas ce que tu veux?

Tubafat
0
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007
30 août 2007 à 15:06
hello tubafat !

il n'y a pas de message d'erreur.
il n'y a rien qui se produit.
au debut j'avais un code avec plein de boucle while et if, la compilation se faisait apres un temp trop long!
on m'a proposé de tout remplacer par la fonction FIND, pour amélioré le temps de compilation.
ca va plus vite c'est vrai... mais ca ne me donne aucun résultat...
je suis perdu la.
je vois pas quoi rajouter pour que les résultats s'affichent.

Monaldinho

 faites comme moi, éssayer d'éviter le coté obscur de la force
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
30 août 2007 à 15:50
Alors après avoir bien regardé ton code, plusieurs points m'interpellent:

- dans ton descriptif tu dis que :"colonne1: dates, colonne 2: codes clients, colonne 3: types "  mais dans ton code: id_cherche = feuille1.Cells(i, 3) 'colonne 3
date_cherche = feuille1.Cells(i, 1) 'colonne 1
'Type_Cherche = feuille1.Cells(i, 2) 'colonne 2

- tu écris par exemple: feuille1.Cells(i, 3), ne sfaudrait-il pas plutôt écrire Worksheets("feuille1").cells(i,3) ?

Pour le rest, j'ai testé, chez moi ça marche bien pour la première valeur trouvé et après ça fait du grand n'importe quoi...
J'espère que tu trouveras une meilleure aide. En attendant je continue à chercher.

@+

Tubafat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
30 août 2007 à 16:19
De rien, je ne connaissais pas cette fonction non plus, donc ça me permet d'apprendre en même temps!!!

Tubafat
0
Rejoignez-nous