Utilisation Méthode Find

Bonjour à tous, en tant que débutant sur VBA j'aimerais solliciter votre aide,

J'ai besoins d'utiliser la fonction Find, pour l'instant j'ai réussi par l'utilisation d'un formulaire de saisie ou je rentre un numéro d'affaire (ex : 29150) à créer un compte rendu dans une autre feuille reprenant plusieurs cellules se trouvant sur la ligne du fameux numéro d'affaire.

Le problème c'est que j'aimerais qu'en rentrant la saisie d'un numéro d'affaire (ex 29150)

VBA aille me chercher toute les lignes de la colonne "A" CONTENANT 29150, pour pouvoir ensuite les ranger dans la feuilles de compte rendu.

J’espère être claire dans ma demande, je n'arrive pas a vous joindre le fichier (trop gros)

Je vous ai joins une capture d'écran de mon code ainsi que la mise en forme du compte rendu

Merci de prendre le temps pour résoudre mon problème.

vba vba2

J'ai oublié de vous précisez que pour l'instant cela marche mais le code s’arrête à la première ligne qu'il va trouver contenant "29150"

Moi j'aimerais qu'il me les affiches toutes et a l'affiler dans mon compte rendu avec les resultats correspondant

vba3

Bonjour Marius, bonjour le forum,

Mais qu'ont-ils tous ce matin ?!... Des captures d'écran et pas de fichier... Sans fichier je ne m'y risquerais pas...

Bonjour ThauThème,

Je m'excuse mille fois, comment puis-je insérer un fichiers qui fait plus de 1500 Ko ??

Re,

Simplissime ! Tu copies/Colles une poignée de données significatives dans un fichier exemple ayant la même structure que l'original (nom des onglets, en placement des données etc.). Puis, tu envoies ce fichier exemple...

Re

En effet c'est plus que simple,

Voici le fichier, j'ai laisser 4 ligne de données dans "SOURCE AUTO" pour pouvoir travailler dessus

En vous remerciant par avance de prendre le temps pour mon problème

Bonsoir Marius, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :

Private SA As Worksheet 'déclare la variable SA (onglet Source Auto)
Private R As Worksheet 'déclare la variable R (onglet RECAP)
Private DL As Long 'déclare la variable DL (Dernière ligne DL)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim I As Long 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)

Set SA = Worksheets("Source Auto") 'définit l'onglet SA
Set R = Worksheets("RECAP") 'définit l'onglet R
DL = SA.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet SA
TV = SA.Range("A1:AJ" & DL) 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 4 To DL 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la 4ème)
    'aliment le dictionnaire D avec les caractères avant le tiret de la donnée ligne I colonne 1 (=> colonne A)
    D(Split(TV(I, 1), "-")(0)) = Split(TV(I, 1), "-")(0)
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec le liste des éléments du dictionnaire D sans doublon
End Sub

Private Sub cmdRapport_Click()
Dim PL1 As Integer
Dim PL2 As Integer
Dim PL3 As Integer

R.Range("B3:E7").ClearContents
R.Range("B9:E13").ClearContents
R.Range("B15:E19").ClearContents
R.Activate
For I = 4 To DL
    If Split(TV(I, 1), "-")(0) = Me.ComboBox1.Value Then
        PL1 = IIf(R.Range("B3").Value = "", 3, R.Range("B2").End(xlDown).Row + 1)
        PL2 = IIf(R.Range("B9").Value = "", 9, R.Range("B8").End(xlDown).Row + 1)
        PL3 = IIf(R.Range("B15").Value = "", 15, R.Range("B14").End(xlDown).Row + 1)
        R.Cells(PL1, "B").Value = TV(I, 1)
        R.Cells(PL1, "C").Value = Round(TV(I, 26), 2)
        R.Cells(PL1, "D").Value = Round(TV(I, 27), 2)
        R.Cells(PL1, "E").Value = Round(TV(I, 28), 2)
        R.Cells(PL2, "B").Value = TV(I, 1)
        R.Cells(PL2, "C").Value = Round(TV(I, 22), 2)
        R.Cells(PL2, "D").Value = Round(TV(I, 34), 2)
        R.Cells(PL2, "E").Value = Round(TV(I, 35), 2)
        R.Cells(PL3, "B").Value = TV(I, 1)
        R.Range(R.Cells(PL3, "C"), R.Cells(PL3, "E")).Value = Round(TV(I, 36), 2)
    End If
Next I
Unload Me
End Sub

Private Sub btnvisualiser_Click()
Sheets("RECAP").Activate
    Range("B3").Select
End Sub
20marius-v01.xlsm (46.06 Ko)

Bonjour Thauthéme,

Il va me falloir un peut de temps pour comprendre ton code,

mais en effet ça répond PARFAITEMENT a se que j'attendais, mille merci d'avoir pris le temps de me lire et de répondre a mon problème.

Re,

• Au lieu de lire directement dans les cellules de l'onglet Source Auto j'ai utilisé une variable TV de type variant. Lire des données dans ce genre variable tableau va beaucoup mais alors beaucoup, beaucoup plus vite que de les lire directement dans les cellules. Donc idéal sur les gros tableaux.

• La fonction Split renvoie un tableau avec tous les caractères séparés par une délimiteur.

Split("1/2/3", "/")(0) renvoie "1"

Split("1/2/3", "/")(1) renvoie "2"

Split("1/2/3", "/")(2) renvoie "3"

• L'utilisation d'un dictionnaire est le moyen le plus rapide pour afficher une liste sans doublon. C'est encore un domaine que je maîtrise pas complètement mais je me réfère toujours au site de jacques BOISGONTIER : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm

Le reste devrait aller tout seul...

Rechercher des sujets similaires à "utilisation methode find"