XL 2013 Problème avec fonction Find

alex_b76

XLDnaute Nouveau
Bonjour,

Je dispose de deux feuilles dans un classeur Excel. Les deux feuilles ont la première ligne de légende similaire tel que (designation, sin, masse, cdg_1, cdg_2, cdg_3).
Dans la feuille 1 il y a seulement quelques lignes avec une désignation et un numéro pour le sin d'indiqué.
Dans la feuille 2, il y a toutes beaucoup plus de lignes avec toutes les colonnes designation, sin, masse, cdgs complétées cette fois.
J'essaye donc de faire correspondre les valeurs des numéro de sin de la première feuille avec la fonction "find" puis de prendre la valeur des colonnes de masse et cdgs pour les récupérer dans la feuille 1.

Voici mon code ... qui ne fonctionne pas malgré de nombreuses modifications

Code:
Sub Recherche_sin()
Dim i As Integer
Dim nb_sin As Integer
Dim recherche_result As Range 'Inutile
Dim Masse_sin As Variant
Dim CDG_X_sin As Variant
Dim CDG_Y_sin As Variant
Dim CDG_Z_sin As Variant
Dim sin_number As Variant

nb_sin = Range("B2").End(xlDown).Row

For i = 2 To nb_sin
    sin_number = Cells(i, 2).Value
    Set recherche_result = Worksheets("Feuil2").Columns(2).Cells.Find(sin_number, LookAt:=xlPart, SearchOrder:=xlByRows)
    If Not (recherche_result Is Nothing) Then
        Masse_sin = Cells(recherche_result.Row, 3).Value
        CDG_X_sin = Cells(recherche_result.Row, 4).Value
        CDG_Y_sin = Cells(recherche_result.Row, 5).Value
        CDG_Z_sin = Cells(recherche_result.Row, 6).Value
        Worksheets("Feuil1").Cells(i, 3) = Masse_sin
        Worksheets("Feuil1").Cells(i, 4) = CDG_X_sin
        Worksheets("Feuil1").Cells(i, 5) = CDG_Y_sin
        Worksheets("Feuil1").Cells(i, 6) = CDG_Z_sin
    End If
Set recherche_result = Nothing
Next
End Sub

Je vous remercie de votre aide

Voici un classeur pour l'exemple
 

Pièces jointes

  • Macro_boulot.xlsm
    17.1 KB · Affichages: 27
Dernière modification par un modérateur:

thebenoit59

XLDnaute Accro
Re : Problème avec fonction Find

Bonsoir Alex.

Pour ce genre de travail, partir avec un dictionnaire est sans doute plus simple.
Je n'ai pas le temps pour commenter le code, je le ferai plus tard si besoin.

Code:
Sub Correspondance()
Dim i As Long
Dim d As Object: Set d = CreateObject("scripting.dictionary")
    With Feuil2
    For i = 2 To .[b65000].End(xlUp).Row
    For j = 3 To 6
    d(.Cells(i, 2).Value) = d(.Cells(i, 2).Value) & .Cells(i, j).Value & ":"
    Next j, i
    End With
    With Feuil1
    For i = 2 To .[a65000].End(xlUp).Row
    If d.exists(.Cells(i, 2).Value) Then .Cells(i, 3).Resize(, 4).Value = Split(d(.Cells(i, 2).Value), ":")
    Next i
    End With
End Sub

Edit: Bonsoir Hieu, une erreur a du glisser dans ta formule, les résultats ne coïncident pas chez moi.
 

Lone-wolf

XLDnaute Barbatruc
Re : Problème avec fonction Find

Bonsoir à tous et bienvenue à alex sur XLD :)

Voici ton code corrigé.

Code:
Sub Recherche_sin()
Dim i As Integer
Dim nb_sin As Integer
Dim recherche_result As Range
Dim Masse_sin As Variant
Dim CDG_X_sin As Variant
Dim CDG_Y_sin As Variant
Dim CDG_Z_sin As Variant
Dim sin_number As Variant

With Feuil1
nb_sin = .Range("B2").End(xlDown).Row

For i = 2 To nb_sin
    sin_number = .Cells(i, 2).Value
    Set recherche_result = Feuil2.Columns(2).Cells.Find(sin_number, LookAt:=xlWhole, SearchOrder:=xlByRows)
    If Not recherche_result Is Nothing Then
        Masse_sin = recherche_result.Offset(0, 1).Value
        CDG_X_sin = recherche_result.Offset(0, 2).Value
        CDG_Y_sin = recherche_result.Offset(0, 3).Value
        CDG_Z_sin = recherche_result.Offset(0, 4).Value
        .Cells(i, 3) = Masse_sin
        .Cells(i, 4) = CDG_X_sin
        .Cells(i, 5) = CDG_Y_sin
        .Cells(i, 6) = CDG_Z_sin
    End If
Next
Set recherche_result = Nothing
End With
End Sub
 
Dernière édition:

alex_b76

XLDnaute Nouveau
Re : Problème avec fonction Find

Bonsoir à vous deux,

Merci de votre réactivité en tout cas ^^

Salut,

Une proposition, sans macro

++

Merci à toi, je ne connaissais pas cette fonction. Le soucis c'est que le fichier Excel se créer et se forme à partir d'une macro du logiciel CATIA. Autrement dit, toutes les commandes sont à partir de Catia et non de Excel, c'est pourquoi je ne peux utiliser les formules.

Benoit, je testerai et essaierai de comprendre ton code demain, je pensais faire un boucle dans une boucle aussi si je ne réussissait pas. En tout cas merci. Sinon vu le temps que j'ai passé sur le bout de code, j'aimerais savoir ce qui cloche si ça ne vous dérange pas. Enfin si je suis complètement à côté de la plaque et qu'il faut tout reprendre autant me le dire ça ira plus vite ^^
 

alex_b76

XLDnaute Nouveau
Re : Problème avec fonction Find

Bonsoir à tous et bienvenue à alex sur XLD

Une autre proposition

Merci Lone-wolf, c'est parfait ! J'analyse ton code demain pour comprendre mes erreurs.

Merci à tous pour votre aide et pour votre réactivité, ça fait plaisir surtout quand on galère pendant de longues heures sur une vingtaine de ligne ^^.

Bien cordialement
 

Hieu

XLDnaute Impliqué
Re : Problème avec fonction Find

Yop, re, Alex, Benoit, Lone,

J'ai été un peu vite ^^

Me suis raté ; Meme si ca sert à rien, ce que je voulais faire, en piece jointe.

@Alex : Fais attention, Catia, c'est du Vb et non, du Vba, j'ai pas la compétence, pour te dire la différence, mais, je sais qu'il en existe une.

++
 

Pièces jointes

  • Macro_boulot_v1.xlsm
    14.7 KB · Affichages: 27

alex_b76

XLDnaute Nouveau
Re : Problème avec fonction Find

@Alex : Fais attention, Catia, c'est du Vb et non, du Vba, j'ai pas la compétence, pour te dire la différence, mais, je sais qu'il en existe une.

Alors c'est surement le cas. A vrai dire je ne connais pas les subtilités entre les deux. En tout cas sur CATIA, je peux importer les bibliothèques Microsoft Excel et travailler avec les fonctions. Donc pour l'instant j'ai un bon bout de code qui fonctionne (Mise à part celui que je vous ai présenté)

A lone :
Si j'ai bien compris, dans les variable Masse_sin etc .. tu récupères le range de la cellule alors que moi je récupérais la valeur contenu de la cellule. Pourquoi ça ne fonctionnerais pas?
 
Dernière modification par un modérateur:

Lone-wolf

XLDnaute Barbatruc
Re : Problème avec fonction Find

Bonjour alex

Non, la macro récupère bien la valeur. Quand on écrit une macro du style =. Cells(x, 1) - = .Cells(x, 2) etc; le 1 correspond à la colonne A, le 2 la colonne B et ainsi de suite.

Quand tu fait une recherche avec Find, comme dans l'exemple, il ne faut pas mettre recherche_result entre parenthèse; on les met par exemple dans certaines conditions: If IsDate(recherche_result) Then oubien If IsNumeric(recherche_result) Then etc.

Encore une fois, avec l'exemple Find: comme tu recherche dans la colonne B, celle-ci avec .Offset, devient la colonne 0 - C = 1 - D = 2; et A = -1. Je ne sais pas si tu arrive à comprendre.
 

alex_b76

XLDnaute Nouveau
Re : Problème avec fonction Find

Bonjour,

J'ai compris pour le offset, ça permet de se décaler.
Pour le .Cells, je ne savais pas que l'on pouvais faire comme ça, je manque de connaissance dans la syntaxe.

Merci bien à vous.

Cdlt
 

Discussions similaires

Réponses
0
Affichages
176

Statistiques des forums

Discussions
312 492
Messages
2 088 908
Membres
103 982
dernier inscrit
krakencolas