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 SubBonjour,
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 SubMerci à 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
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