Contexte:groupant cellules au cours d'une boucle ne répond pas comme prévu
J'ai une feuille nommée RM que je tire des données d'étape de à une feuille nommée Finance via une boucle (boucle est par feuilles ("RM")). Une fois que les données sont tirées vers l'avant, la feuille est censée regrouper des éléments dans deux sous-totaux:
1) Groupe des activités d'étape
2) Groupe du tout ce qui a été tiré sur pendant la boucle
Voici le code:
Dim i As Integer
Dim LR As Long, FR As Long
FR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 1).End(xlUp).Row
Sheets("Finance").Cells(FR + 1, 1).Value = "Raw Materials"
Sheets("Finance").Cells(FR + 1, 7).Value = Sheets("RM").Cells(12, 2).Value
For i = 16 To 358 Step 18
LR = Sheets("Finance").Cells(Sheets("Finance").Rows.Count, 1).End(xlUp).Row
If Sheets("RM").Cells(i, 4) > 0 And Sheets("RM").Cells(i, 2) = "Fixed" Then
'Milestone row
Sheets("Finance").Cells(LR + 1, 1).Value = Sheets("RM").Cells(i, 1).Value
Sheets("Finance").Cells(LR + 1, 7).Value = Sheets("RM").Cells(i, 4).Value
Sheets("Finance").Rows(LR + 1).Font.Bold = True
'Number
Sheets("Finance").Range(Sheets("Finance").Cells(LR + 2, 1), Sheets("Finance").Cells(LR + 9, 1)).Value = Sheets("RM").Cells(i, 1).Value
'Removed middle section, which pulls over data from different columns
'Group Milestone subactivities
If Sheets("Finance").Cells(LR, 1).Value = Sheets("Finance").Cells(LR - 2, 1).Value Then
Sheets("Finance").Range(Sheets("Finance").Cells(LR + 2, 1), Sheets("Finance").Cells(LR + 9, 1)).EntireRow.Group
Else
End If
Else
End If
Next i
Sheets("Finance").Rows(FR + 1).Font.Bold = True
If LR - FR > 1 Then
Sheets("Finance").Range(Sheets("Finance").Rows(FR + 2), Sheets("Finance").Rows(LR)).EntireRow.Group
Else
End If
Problème:
Le regroupement des événements jalons ne se déroule pas correctement. Lorsque le code s'exécute, seuls certains des jalons obtiennent leur regroupement, bien que le regroupement global se produise.
Dans une liste de 10 jalons, 1 et 10 n'ont pas de groupement de jalons, mais 2 à 9 groupent.
Je pensais que j'avais un problème avec l'instruction if elle-même, que si LR-FR> 2 alors, mais en passant, j'ai trouvé quelque chose d'étrange. Comme je l'ai fait avec F8, j'ai réalisé que les données que je .copy/.pastespecial n'apparaissent qu'après qu'une ou deux boucles se sont produites. Le regroupement apparaît ensuite pour les dernières données visuellement ajoutées qui ont été collées. Ensuite, les données suivantes apparaissent jusqu'au dernier bit.
Question:
Y at-il un moyen de forcer la pâte à afficher les données? Y at-il autre chose qui causerait cette activité d'Excel/VBA?
Toute aide à la résolution serait appréciée.
Je diviserais la tâche en 1) copier/coller, 2) grouper. Une fois que vous savez qu'il fonctionne comme vous le souhaitez, retournez-y et optimisez-le.Vous dépendez de l'indexation des lignes dans la boucle et avec tout le collage et le regroupement, il serait utile d'éliminer que les indices ne sont pas fiables pendant la boucle. –
Comme vous collez juste les valeurs, il serait beaucoup plus rapide (et peut-être plus clair) d'utiliser '_.Value = _.Value' au lieu de copier/coller des valeurs. Puisque vous ne connaissez pas la taille de la plage de copie, vous pouvez tirer parti de la fonction 'resize', comme indiqué dans le sous-élément' Test2' de [cette réponse] (https://stackoverflow.com/a/17241661/ 3978545) – Wolfie
@Wolfie Je suis retourné et modifié pour montrer avec output.value = input.value. Oui, c'est plus propre, bien que je rencontre toujours le problème que les valeurs n'apparaissent pas pendant la boucle. Modifier le code dans le post momentanément. – Cyril