Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Abcisse

XLDnaute Nouveau
Bonjour à tous,

Voilà j'ai un soucis pour le boulot et comme je n'y connais rien en macro je me dit que peut être vous pourriez me faire gagner du temps :)

J'ai un tableau avec 4 colonnes : une abscisse, une ordonnée, une abscisse une ordonnée. C'est à dire un truc du type X1, Y1, X2, Y2.

Ce que j'aimerai c'est avoir une macro qui compare les deux abscisses et si elles sont identique qui renvoi la valeur des deux ordonnées. A la fin je devrai avoir donc un tableau de type : X, Y1, Y2.

Un exemple :
0.10 | 23 | 0.15 | 34
0.30 | 21 | 0.10 | 56

Ça devrait renvoyer : 0.10 | 23 | 56

Voila, j'espère que je suis clair. Si vous pouvez m'aider ou me proposer des pistes cela m'aiderait sinon je sens que je vais y passer des jours!

Merci à vous!
 

Abcisse

XLDnaute Nouveau
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Merci beaucoup d'avoir passé du temps sur ce problème.

Ta solution marche bien mais semble inopérante à partir d'un certain nombre de lignes. Ce que je ne comprend pas très bien, c'est que ce nombre de ligne max semblent être variables.

Voici un lien pour avec ta feuille remplie pour voir le problème. Le fichier est trop gros pour passer en pièce jointe!

Lien


Merci encore
 
Dernière édition:

Abcisse

XLDnaute Nouveau
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Bonjour,

Quel est le probleme ?
Que evrait on obtenir ? combien de lignes ?

Bonjour,

La première solution dans ce fichier devrait être 0.06. Or on s'aperçoit que lorsque le nombre de ligne est grand il renvoi des solutions qui ne sont pas bonnes. 0.01 et 0.04 par exemple ne sont pas communs aux deux abscisse.

Je n'ai aucune idée du nombre de ligne que l'on devrait obtenir, par contre les solutions devrait commencer par X=0.06, 0.09, 0.12, 0.2, 0.36
 

CISCO

XLDnaute Barbatruc
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Bonjour à tous

Et par formules ?

Remarque au passage : Peut on avoir plusieurs X2 identiques à X1 (et aussi plusieurs X1 identiques les uns aux autres) ?

@plus
 

Pièces jointes

  • X1Y1X2Y2.xls
    24.5 KB · Affichages: 83

Abcisse

XLDnaute Nouveau
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Bonjour à tous

Et par formules ?

Remarque au passage : Peut on avoir plusieurs X2 identiques à X1 (et aussi plusieurs X1 identiques les uns aux autres) ?

@plus

Bonjour Cisco,

A priori je me suis déjà débrouillé en amont pour que les X1 et X2 soient uniques. Et comme les X1 et X2 sont croissants, il ne peut à priori n'y avoir qu'une seule solution si il y en a une. Par contre les Y peuvent avoir n'importe quel valeur.

Merci pour ton aide, je ne connaissais pas du tout SOMMEPROD. Par contre, il y a un soucis qui vient peut être de moi. J'ai retouché tes formules pour augmenter le nombre de lignes. En gros j'ai remplacé tout les 9 par mon nombre de lignes max (1405) et la valeur renvoyée en Y2 n'est plus la bonne.

Voici ton tableau rempli ici.

Par exemple, pour la valeur X=2.1, Y2 devrait être égal à 0 ce qui n'est pas le cas. Est ce que je me suis trompé quelque part ?
 

Catrice

XLDnaute Barbatruc
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Re,

Exact, petit bug dans le code ... :( autant pour moi.
Il faut modifier cette ligne comme suit :

Set c = MaZone.Offset(0, 2).Find(X, LookAt:=xlWhole)


ou bien utiliser ce code :

Sub Test()
Sheets(2).Range("A1").CurrentRegion.Offset(1, 0).Clear
Set MaZone = Sheets(1).Range("A2:" & Sheets(1).Range("A65536").End(xlUp).Address)
For Each X In MaZone
MaVar = Application.Match(X.Value, MaZone.Offset(0, 2), 0)
If Not IsError(MaVar) Then
With Sheets(2).Range("A65536").End(xlUp)
.Offset(1, 2).Value = Sheets(1).Cells(MaVar, 3).Value
.Offset(1, 0).Resize(1, 2).Value = X.Resize(1, 2).Value
End With
End If
Next
End Sub

Avec ton fichier exemple, je trouve 0.06, 0.09, 0.12, 0.36, 0.39 ... comme premieres valeurs.
Mais pas de 0.2.
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Bnjour Absicce

la troisième colonne donnant Y2 doit être rentrée sous forme matricielle (à la place de entrée, faire ctrl+maj+entrée), et on obtient la formule suivante, avec les accolades (ce qui fait toute la différence) :

{=INDEX(D$1:D$1405;MAX(SI(F2=C$2:C$1405;LIGNE(C$2:C$1405))))}

bon W.E.
 

Abcisse

XLDnaute Nouveau
Re : Macro pour comparer deux abscisses et renvoyer les ordonnées correspondantes

Merci à vous deux. Tout marche parfaitement et vous m'avez fait gagner beaucoup de temps.

Bon dimanche à vous et merci encore!

Edit : Catrice : oui en effet, je me suis planté pour le 0.2, il ne fallait pas le trouver :D

Merci Catrice (Ok on a dû déjà te la faire cette blague :) )
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
119
Réponses
0
Affichages
83

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof