Aide Boucle VBA
Bonjour,
J'ai mis en pièce jointe un exemple de mes données. Ci dessous ce que je souhaite faire précisément. J'ai pensé à le faire avec des si et des recherche v mais ayant plus de 1500 lignes, le nombre de test à faire est conséquent...
J'ai un tableau qu'on me fournit tous les mois avec des dates par bâtiment, par niveau et par type de maquette que j'ai mis dans un onglet 1.
Sur un autre onglet 2, j'ai une liste de document répartis par document, niveau et type de maquette.
Ce que je souhaite faire c'est lire dans chaque colonne : quel est le bâtiment, le niveau et le type de maquette et affecter dans une colonne la date que j'ai dans le tableau de mon onglet 1.
Je souhaite pouvoir faire ce test quelque soit le nombre de ligne.
Pourriez vous m'aider à mettre en oeuvre la solution à ce problème svp ?
Salut,
Au vu de la construction de ton fichier on peut imaginer ce genre de bidouille :
A tester,
Girodo
Bonjour à tous,
un essai macro:
Private Sub CommandButton1_Click()
Dim W1 As Worksheet, W2 As Worksheet, T, TT(), x As Long, i As Long, j As Byte
'** détermination des feuilles
Set W1 = Worksheets("Feuil1")
Set W2 = Worksheets("Feuil2")
'** Effacement FEuille résultats
W2.Range("A3:E" & W2.Range("A" & Rows.Count).End(xlUp).Row).ClearContents
'** mise en tableau données feuil 1
T = W1.Range("D5:H" & W1.Range("D" & Rows.Count).End(xlUp).Row)
'** création tableau résultats
ReDim TT(1 To UBound(T, 1) * 3, 1 To 5)
'** initialisation N° ligne tableau résultats
x = x + 1
'** boucle sur le tableau initial et initialisation tableau résultats
For i = LBound(T, 1) To UBound(T, 1)
For j = 1 To 3
TT(x, 1) = T(i, 1)
TT(x, 2) = T(i, 2)
TT(x, 3) = j
TT(x, 5) = T(i, j + 2)
x = x + 1
Next
Next
'** copie tableau résultat feuil2
W2.Range("A3").Resize(UBound(TT, 1), UBound(TT, 2)) = TT
End SubA+
Salut,
Au vu de la construction de ton fichier on peut imaginer ce genre de bidouille :
TEST Exia .xlsx
A tester,
Girodo
Je n'avais pas pensé à faire cette concaténation dans le tableau 1, bien vu.
Par contre je ne comprends pas le n° d'index de colonne.
Est ce que cette formule est généralisable si mon numéro de maquette change ? Exemple au lieu d'avoir 1 j'ai D1 ?
Bonjour à tous,
un essai macro:
Private Sub CommandButton1_Click() Dim W1 As Worksheet, W2 As Worksheet, T, TT(), x As Long, i As Long, j As Byte '** détermination des feuilles Set W1 = Worksheets("Feuil1") Set W2 = Worksheets("Feuil2") '** Effacement FEuille résultats W2.Range("A3:E" & W2.Range("A" & Rows.Count).End(xlUp).Row).ClearContents '** mise en tableau données feuil 1 T = W1.Range("D5:H" & W1.Range("D" & Rows.Count).End(xlUp).Row) '** création tableau résultats ReDim TT(1 To UBound(T, 1) * 3, 1 To 5) '** initialisation N° ligne tableau résultats x = x + 1 '** boucle sur le tableau initial et initialisation tableau résultats For i = LBound(T, 1) To UBound(T, 1) For j = 1 To 3 TT(x, 1) = T(i, 1) TT(x, 2) = T(i, 2) TT(x, 3) = j TT(x, 5) = T(i, j + 2) x = x + 1 Next Next '** copie tableau résultat feuil2 W2.Range("A3").Resize(UBound(TT, 1), UBound(TT, 2)) = TT End SubA+
Merci pour ta proposition. Je t'avoue que je n'ai pas tout compris mais j'ai essayé de faire tourner cette macro. Je n'ai pas l'impression que ça corresponde à ma demande vu le résultat Ou alors j'ai raté quelque chose.
Mon 1er tableau est fixe et les dates changent de façon mensuelle.
Mon deuxième tableau est fixe aussi. Le nombre de ligne augmente régulièrement. Ce que je souhaite faire c'est : en fonction des paramètre de la ligne, la date est recherché dans le tableau 1 puis mise dans la cellule du tableau 2.
Bonjour,
Pour comprendre exactement le fonctionnement de la formule rechercheV je te renvoie vers la doc ici :
https://www.excel-pratique.com/fr/fonctions/recherchev.php
Le no index colonne définit dans quelle colonne de la matrice se situe l'information à aller chercher.
Le fonctionnement de rechercheV est le suivant :
La fonction descend la première colonne de la table_matrice fournie jusqu'à arriver à la valeur_cherchée.
Dès lors qu'il l'a trouvé il arrête de descendre et décale vers la droite selon le no_index fourni.
Donc dans mon cas cela ne vas pas fonctionner si tes n° de Maquettes de sont pas des nombres dans l'ordre 1, 2, 3...
Pour contourner, j'ai ajouté une petite subtilité avec la formule EQUIV.
Bon Courage !!
Girodo,