Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Bogue sur Find(What...)? ou sur Offset?? That is the question

A

albert

Guest
bonjour à tous, bonjour forum,

dans la macro pièce jointe, le travail s'effectue ainsi :

En partant d’une date donnée pour le cours d’une action, « Find » recherche la valeur de l’indice à cette même date

For i = 2 To Range("P7").End(xlDown).Row
Date_Rech = Cells(i, 1).Value
With Worksheets("Indice").Range("P7110")
'à partir de P Find va chercher dans U pour envoyer dans V
Indice = .Find(What:=Date_Rech).Offset(0, 5).Value
End With

L’opération de recherche fonctionne bien et la colonne recherchée est recopiée ligne par ligne dans la feuille « bouygues »…

PROBLEMATIQUE

….cependant, la colonne devrait être recopiée en V7 et non en V2 dans "BOUYGUES"
… TOUTE LA COLONNE… en fait elle est recopiée en partie : il y a décalage à partir de V104 , qui ne correspond pas à Y 104


Si je modifie la boucle :
(bouton 2)

Sub Modèle2() Dim Feuille As Worksheet

For i = 7 To Range("P7").End(xlDown).Row

La colonne est recopiée en V7 mais les 5 premières lignes sont scalpées…

Que faire ??? j’ai essayé de résoudre , sans succès (je perds du poids, je déprime, je vais bientôt insulter mon computer… mais ça ne change rien)

Le bogue apparaît sur
Indice = .Find(What:=Date_Rech).Offset(0, 5).Value

J’ai donc fait varier Offset de –5 à + 5 c’est toujours en panne…

:-((


merci d'avance pour un coup de main

albert
 

Pièces jointes

  • Transcolonne.zip
    17.1 KB · Affichages: 27
L

LaurentTBT

Guest
Bonsoir à tous, salut Albert.

Ton fichier n'est pas simple à comprendre, car tes colonnes sont recopiées pleins de fois, mais décalées.

Reprenons ta macro ligne par ligne:

Sub Modèle()
Dim Feuille As Worksheet
For i = 2 To Range("P7").End(xlDown).Row
Date_Rech = Cells(i, 1).Value


Ta boucle porte ici sur les données de la colonne A de la feuille Bouygues qui dans ton exemple contient 109 données

With Worksheets("Indice").Range("P7110")
'à partir de P va chercher dans U pour envoyer dans V
Indice = .Find(What:=Date_Rech).Offset(0, 5).Value
End With
'valeurs de l'indice recopiées dans colonne V
'colonne Y reproduit la colonne U de la feuille indice


La suite de ta macro va chercher les indices à partir de la colonne P de la feuille "indice" qui elle ne contient que 104 données.

Il est donc normal que quand i vaut 105, Date_Rech vaut alors 77062 qui n'existe pas dans la colonne P de la feuille Indice. Et donc la méthode Find ne trouvant rien entraîne le Bogue.
Soit tu complète auparavant tes données de la feuille Indice pour qu'elles soient toutes présentes, soit tu rajoutes un test pour vérifier que Find trouve bien quelque chose:
If Not .Find(What:=Date_Rech) Is Nothing Then
Indice = .Find(What:=Date_Rech).Offset(0, 5).Value
else
Indice=""
end if

Sinon, pour le problème de décalage:

'... problématique : recopier en V7 et non en V2 dans "BOUYGUES"
Cells(i, 22).Value = Indice

tu peux simplement mettre:
Cells(i+5, 22).Value = Indice

Mais globalement, je ne comprend pas pourquoi tu passes par des colonnes P, Q et U qui reprennent en les décalant de 5 lignes tes colonnes A et B de ta feuille indice. En fait, ta colonne Y de ta feuille Bouygue est tout simplement ta colonne B de ta feuille Indice +5.
Ainsi, pour moi, si tu mets en V7 la formule suivante
=Indice!B2+5 que tu étires sur toute la colonne V, tu as le même résultat.

Mais tu dois sans doute avoir une bonne raison.

En espérant t'avoir un tant soit peu aiguillé.

Bonne nuit, Laurent.
 
A

albert

Guest
Merci LaurentTBT, pour ce cours parfait...
avec ton analyse, je me suis tiré d'affaires.

En fait, j'ai l'impression que lorsqu'on est sur une macro et que ça ne marche pas, il faut laisser tomber un moment, laisser refroidir et revenir dessus après une bonne nuit de sommeil : l'esprit est plus clair.

Comme tu l'as remarqué, je voulais transposer les colonnes A:B en P avec Offset utilisable dans les 2 cas. la pièce jointe était en effet embrouillée...

j'envoie le résultat, ça peut intéresser quelqu'un sur le forum

...il y a un inconvénient, cependant dans cette maro : en principe, la recherche de correspondance ligne par ligne indice / cours d’un titre (bouygues) devrait permettre de trouver la date qui n’existe pas dans une colonne, de la rajouter et de recopier le cours de la veille pour qu’il n’y ait pas de cellule vide.. (sinon un simple copié-collé doit suffir)
Or, si j’ai eu des difficultés hier, c’était parce que les colonnes ne pouvaient pas correspondre : elles ne sont pas de même longueur – comme tu l’as remarqué-, mais également il manque une date (14/08)dans la feuille
« bouygues »


pour le code dans la feuille :
"=Indice!B2+5 que tu étires sur toute la colonne V, tu as le même résultat."

je crée plusieurs feuilles, de manière discrétionnaire ce qui fait que je ne peux utiliser que vba


cordialement

albert
 

Pièces jointes

  • Transcolonne1.zip
    13.1 KB · Affichages: 26
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…