Boucle VBA?

Bonjour à toutes et tous,

je me lance dans la récupération de données au sein de ma base via un formulaire VBA

jusqu’ici ce n’était que des valeurs uniques et cela ne me posait donc pas de soucis.

Cependant j'attends des sections à résultats multiples et c'est là que j'aurais besoin vos lumières.

Non seulement je pense que l'on doit pouvoir optimiser, mais cela bug si pas de résultat...

WP1 = Application.WorksheetFunction.VLookup(ProjectId & "_1", Sheets("WP").Range("A:J"), 4, 0)

WP2 = Application.WorksheetFunction.VLookup(ProjectId & "_2", Sheets("WP").Range("A:J"), 4, 0)

WP3 = Application.WorksheetFunction.VLookup(ProjectId & "_3", Sheets("WP").Range("A:J"), 4, 0)

WP4 = Application.WorksheetFunction.VLookup(ProjectId & "_4", Sheets("WP").Range("A:J"), 4, 0)

WP5 = Application.WorksheetFunction.VLookup(ProjectId & "_5", Sheets("WP").Range("A:J"), 4, 0)

WP6 = Application.WorksheetFunction.VLookup(ProjectId & "_6", Sheets("WP").Range("A:J"), 4, 0)

WP7 = Application.WorksheetFunction.VLookup(ProjectId & "_7", Sheets("WP").Range("A:J"), 4, 0)

WP8 = Application.WorksheetFunction.VLookup(ProjectId & "_8", Sheets("WP").Range("A:J"), 4, 0)

WP9 = Application.WorksheetFunction.VLookup(ProjectId & "_9", Sheets("WP").Range("A:J"), 4, 0)

WP10 = Application.WorksheetFunction.VLookup(ProjectId & "_10", Sheets("WP").Range("A:J"), 4, 0)

WP11 = Application.WorksheetFunction.VLookup(ProjectId & "_11", Sheets("WP").Range("A:J"), 4, 0)

pourriez vous s'il vous plait m'éclairer sur comment je pourrais procéder?

Merci par avance,

Cordialement

Bonjour,

WP1 = Application.WorksheetFunction.VLookup(ProjectId & "_1", Sheets("WP").Range("A:J"), 4, 0)

qu'est ce que ProjectId ?

c'est un Nom ?

une variable ?

Bonne question désolé ne pas l'avoir exposé en même temps

ProjectId = Application.WorksheetFunction.VLookup(Acronym, Sheets("Projects").Range("A:N"), 2, 0)

pour un meme projet j'ai plusieurs enregistrements et j'ai donc créer un id

exemple:

115749_1

115749_2

115749_3

115749_4

115749_5

chaque id a ensuite un ensemble de donnée associée

ProjectId_1 est une variable ?

oui cela devient une variable dans la macro

en fait j'ai cela

Private Sub UserForm_Initialize()

Acronym = Sheets("TdB Projets").Range("H2")

ProjectId = Application.WorksheetFunction.VLookup(Acronym, Sheets("Projects").Range("A:N"), 2, 0)

Completeform

End Sub

Private Sub Completeform()

WP1 = Application.WorksheetFunction.VLookup(ProjectId & "_1", Sheets("WP").Range("A:J"), 4, 0)

WP2 = Application.WorksheetFunction.VLookup(ProjectId & "_2", Sheets("WP").Range("A:J"), 4, 0)

WP3 = Application.WorksheetFunction.VLookup(ProjectId & "_3", Sheets("WP").Range("A:J"), 4, 0)

WP4 = Application.WorksheetFunction.VLookup(ProjectId & "_4", Sheets("WP").Range("A:J"), 4, 0)

WP5 = Application.WorksheetFunction.VLookup(ProjectId & "_5", Sheets("WP").Range("A:J"), 4, 0)

WP6 = Application.WorksheetFunction.VLookup(ProjectId & "_6", Sheets("WP").Range("A:J"), 4, 0)

WP7 = Application.WorksheetFunction.VLookup(ProjectId & "_7", Sheets("WP").Range("A:J"), 4, 0)

WP8 = Application.WorksheetFunction.VLookup(ProjectId & "_8", Sheets("WP").Range("A:J"), 4, 0)

WP9 = Application.WorksheetFunction.VLookup(ProjectId & "_9", Sheets("WP").Range("A:J"), 4, 0)

WP10 = Application.WorksheetFunction.VLookup(ProjectId & "_10", Sheets("WP").Range("A:J"), 4, 0)

WP11 = Application.WorksheetFunction.VLookup(ProjectId & "_11", Sheets("WP").Range("A:J"), 4, 0)

End Sub

re,

ProjectId est défini

mais

ProjectId_1 ne l'est pas

euh cela fonctionne bien mais je voulais savoir si on pouvait optimiser et gérer les erreurs

dans ma base j'ai comme déjà évoqué

115749_1

115749_2

115749_3

115749_4

115749_5

aussi je fais un lookup sur ProjectId correspondant à ProjectId = Application.WorksheetFunction.VLookup(Acronym, Sheets("Projects").Range("A:N"), 2, 0)

auquel je rajoute _1 / _2 etc. pour aller récupérer les enregistrementsd

d'où

ProjectId & "_1"

peux-tu joindre ton fichier excel ?

Bonjour le fil bonjour le forum,

Peut-être comme ça :

Sub Macro1()
'Dim ProjectId As String 'déclare la variable ProjectId
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Integer 'déclare la variable PL (Première Ligne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim WP(1 To 11) As Integer 'déclare le tableau de 11 variables WP

'ProjectId = "115749" 'pour test
Set O = Worksheets("WP") 'définit l'onglet O
PL = 1 'définit la première ligne PL (à adapter a ton cas)
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O (colonne à adapter à ton cas)
For I = PL To DL 'boucle sur toutes les lignes I de PL à DL
    For J = 1 To 11 'boucle sur les 11 variable de WP
        If O.Cells(I, "D") = ProjectId & "_" & CStr(J) Then
            WP(J) = I
        End If
    Next J
Next I

'le tableau WP contient désormais les 11 lignes où se trouvent les 11 ProjectID (ces dernières lignes seront à effacer par la suite...)
For J = 1 To 11
    MsgBox WP(J)
Next J
End Sub

Bonjour,

Un élément de réponse ?

Cdlt.

Option Explicit

Private Sub UserForm_Initialize()
Dim Acronym 'type à définir
Dim n, ProjectId

    Acronym = Worksheets("TdB Projets").Range("H2")
    n = applicattion.Match(Acronym, Worksheets("Projects").Range("A:A"), 0)
    If IsError(n) Then
        MsgBox "Il n'y a pas de donnée !...", 64, "Information"
    Else
        ProjectId = Application.WorksheetFunction.VLookup(Acronym, Worksheets("Projects").Range("A:N"), 2, 0)
        Completeform
    End If

End Sub

Private Sub Completeform()
Dim ws As Worksheet
Dim rngData As Range
Const COL As Long = 4

    Set ws = Worksheets("WP")
    Set rngData = ws.Range("A:J")   'Range("A:D") ?

    WP1 = WorksheetFunction.VLookup(ProjectId & "_1", rngData, COL, 0)
    WP2 = WorksheetFunction.VLookup(ProjectId & "_2", rngData, COL, 0)
    WP3 = WorksheetFunction.VLookup(ProjectId & "_3", rngData, COL, 0)
    WP4 = WorksheetFunction.VLookup(ProjectId & "_4", rngData, COL, 0)
    WP5 = WorksheetFunction.VLookup(ProjectId & "_5", rngData, COL, 0)
    WP6 = WorksheetFunction.VLookup(ProjectId & "_6", rngData, COL, 0)
    WP7 = WorksheetFunction.VLookup(ProjectId & "_7", rngData, COL, 0)
    WP8 = WorksheetFunction.VLookup(ProjectId & "_8", rngData, COL, 0)
    WP9 = WorksheetFunction.VLookup(ProjectId & "_9", rngData, COL, 0)
    WP10 = WorksheetFunction.VLookup(ProjectId & "_10", rngData, COL, 0)
    WP11 = WorksheetFunction.VLookup(ProjectId & "_11", rngData, COL, 0)

End Sub

Merci à tous pour vos contributions

je vais tester tout cela !

Bonsoir,

désolé pour mon délai de retour mais j'ai du faire des avancements sur des sujets plus prioritaire

j'ai testé ce soir les macros fournies mais doit bien avouer ne pas m'en sortir.

au mieux je récupère les lignes mais pas le détail souhaité et quand je modifie tout bug

aussi j'ai conçu un fichier modèle

2classeur1.xlsm (40.63 Ko)

si dans Tbd Projets on indique comme projet le PROJET1 alors cela récupère les données car le nombre de WP est atteint

si on indique PROJET2 ca bug..

aussi je pense qu'une macro en boucle est préférable mais n'arrive pas à l'appliquer

merci par avance pour votre aide

Rechercher des sujets similaires à "boucle vba"