Problème de remplissage de tableau VBA

Bonsoir,

J’ai commencé à travailler tout récemment sur VBA et actuellement je me retrouve bloquée sur un exercice.

Il s’agit d’un problème par rapport au remplissage de tableaux (voir fichier en pièce jointe)

Onglet Résultat : dans la première colonne les valeurs (que je récupère par rapport à l’élément de référence : ici Company) sont dupliquées et du coup les autres colonnes du tableau se remplissent avec un décalage

Est-ce que vous pourriez m’expliquer ce qu’il faudrait faire pour que la jointure fonctionne ?

Merci d’avance pour votre aide !

Voici la partie du code où je n'arrive pas trouver l'erreur

'Récupération des valeurs pour T-1

For i = 1 To nbL2

If feuille2.Cells(i, 1) = collection Then

feuille1.Cells(i1, 1) = feuille2.Cells(i, 2) 'remplissage avec données Department en T-1

feuille1.Cells(i1, 2) = feuille2.Cells(i, 3) 'Staff en T-1

feuille1.Cells(i1, 4) = feuille2.Cells(i, 4) 'Rev en T-1

End If

Next i

'Récupération des valeurs pour T

For i = 1 To nbL3

If feuille3.Cells(i, 1) = collection Then

feuille1.Cells(i1, 1) = feuille3.Cells(i, 2) 'Department T

feuille1.Cells(i1, 3) = feuille3.Cells(i, 3) 'Staff en T

feuille1.Cells(i1, 5) = feuille3.Cells(i, 4) 'Rev en T

End If

Bonsoir et bienvenue,

ton fichier manque (sans doute trop gros)

je vois une erreur dans l'utilisation de i1 qui fait que ta boucle i ne sert à rien. (tu vas retrouver dans ta cellule(I1,1) la valeur de cellule(nbl2,2) et A quoi correspond ce i1 ? je soupconne qu'il manque un i1=i1+1 comme première instruction après le if ... then

Bonjour,

effectivement j'ai oublié d'insérer le fichier...le voici...j'ai mis la version simplifiée du tableau.

i1 avait été défini comme première ligne de chaque tableau tableau

FistL = i1 i1 = 4

feuille1.Cells(i1 - 1, 1) = "Department"

feuille1.Cells(i1 - 1, 2) = "Staff Q-1"

feuille1.Cells(i1 - 1, 3) = "Staff Q"

merci

15exercice.zip (8.82 Ko)

Bonjour,

une proposition de code sur base de ton fichier.

Dim wss As Object, wst As Object, re As Object
Dim i1 As Long
Dim i As Long, j As Long, company As String

Sub fusion()
' wst = identifiant de la feuille Résultat
    Set wst = Worksheets("Résultat")
    'wss = identifiant de la feuille source des données
    Set wss = Worksheets("Trimestre Q-1")
    ' on vide le contenu de la feuille résultat
    wst.Cells.Delete
    ' dlwss contient le numéro de la dernière ligne utilisée dans la feuille source
    dlwss = wss.Range("A" & Rows.Count).End(xlUp).Row
    ' i1 numéro de ligne sur résultat
    i1 = 0
    ' company contient la company en cours
    company = ""
    ' on prend toutes les lignes de la feuille source
    For i = 2 To dlwss
        If company <> wss.Cells(i, 1) Then
        ' si nouvelle company on mt un entête
            entête
            'on mémorise la nouvelle company en cours
            company = wss.Cells(i, 1)
        End If
        ' on écrit le détail
        detail1
    Next i
    ' on prend la 2ème feuille source
    Set wss = Worksheets("Trimestre Q")
    '
    dlwss = wss.Range("A" & Rows.Count).End(xlUp).Row

    ' on prend toutes les lignes de la feuille source
    For i = 2 To dlwss
    ' on recherche si la company trouvée sur la feuille 2 existe déjà dans la feuille résultat
        Set re = wst.Range("A1:A" & i1).Find("Company " & wss.Cells(i, 1), lookat:=xlWhole)
        ' on l'a trouvée
        If Not re Is Nothing Then
            j = re.Row + 1
            ' on cherche le département
            Do While wst.Cells(j, 1) <> ""
                If wst.Cells(j, 1) = wss.Cells(i, 2) Then
                ' on l'a trouvé on met le détail sur le même ligne
                    detail2
                    Exit Do
                End If
                j = j + 1
            Loop
            If wst.Cells(j, 1) = "" Then
            'on n'a pas trouvé le département, on ajoute une nouvelle ligne
                wst.Rows(j).Insert shift:=xlDown
                i1 = i1 + 1
                detail2
            End If
        Else
        ' on n'a pas trouvé la company, on ajoute un entête, puis on met le détail
            entête
            i1 = i1 + 1
            j = i1
            detail2
        End If
    Next i
End Sub

Sub entête()
    i1 = i1 + 2
    wst.Cells(i1, 1) = "Company " & wss.Cells(i, 1)
    wst.Cells(i1, 1).Font.ColorIndex = 4
    wst.Cells(i1, 1).Font.Bold = True
    i1 = i1 + 1
    wst.Cells(i1, 1) = "Departement"
    wst.Cells(i1, 2) = "Staff Q-1"
    wst.Cells(i1, 3) = "Staff Q"
    wst.Cells(i1, 4) = "Rev Q-1"
    wst.Cells(i1, 5) = "Rev Q"
    wst.Range(Cells(i1, 1), Cells(i1, 5)).Borders.Weight = xlThin
    wst.Range(Cells(i1, 1), Cells(i1, 5)).Font.Bold = True
End Sub
Sub detail1()
    i1 = i1 + 1
    wst.Cells(i1, 1) = wss.Cells(i, 2)
    wst.Cells(i1, 2) = wss.Cells(i, 3)
    wst.Cells(i1, 4) = wss.Cells(i, 4)
    wst.Range(Cells(i1, 1), Cells(i1, 5)).Borders.Weight = xlThin
End Sub

Sub detail2()
    wst.Cells(j, 1) = wss.Cells(i, 2)
    wst.Cells(j, 3) = wss.Cells(i, 3)
    wst.Cells(j, 5) = wss.Cells(i, 4)
    wst.Range(Cells(j, 1), Cells(j, 5)).Borders.Weight = xlThin
End Sub
Rechercher des sujets similaires à "probleme remplissage tableau vba"