Je suis en train de faire rapport de bord de fichier Excel qui sont organisés en rangées,comment ajuster le code pour une meilleure performance
A, B, C,
D, E
le but est à créer des relations de chaque ligne:
A, B
A, C
B, C
I ont les codes suivants, le problème est le code est efficace lorsque les lignes sont de longueur égale, mais par exemple pour les lignes qui précèdent, il créent également des bords suivante (relation):
D « ,"
E ""
qui créent gros problème pour les grands ensembles de données. Je me demandais si un corps peut m'aider à ajuster le code de la façon de créer la liste des arêtes seulement jusqu'aux cellules remplies dans chaque rangée. S'il y a un autre moyen de le faire, plus efficace l'appréciera.
Merci beaucoup, Sera une aide précieuse.
Mon code:
Sub Transform()
Dim targetRowNumber As Long
targetRowNumber = Selection.Rows(Selection.Rows.Count).Row + 2
Dim col1 As Variant
Dim cell As Range
Dim colCounter As Long
Dim colCounter2 As Long
Dim sourceRow As Range: For Each sourceRow In Selection.Rows
For colCounter = 1 To Selection.Columns.Count - 1
col1 = sourceRow.Cells(colCounter).Value
For colCounter2 = colCounter + 1 To Selection.Columns.Count
Set cell = sourceRow.Cells(, colCounter2)
If Not cell.Column = Selection.Column Then
Selection.Worksheet.Cells(targetRowNumber, 1) = col1
Selection.Worksheet.Cells(targetRowNumber, 2) = cell.Value
targetRowNumber = targetRowNumber + 1
End If
Next colCounter2
Next colCounter
Next sourceRow
End Sub
Une solution simple serait de changer 'Pour colCounter = 1 Pour Selection.Columns.Count - 1' à 'Pour colCounter = 1 à WorksheetFunction.CountA (SourceRow)' - qui renvoie le nombre de cellules utilisées dans chaque ligne. Vous feriez mieux de ne pas compter sur 'Selection' si possible ... – MattCrum
Merci. Mais je l'ai essayé, le résultat ne change pas du tout, j'obtiens toujours la relation entre une cellule remplie et une cellule vide, pour des rangées qui sont plus courtes que la rangée la plus longue. –
L'avez-vous déjà fait pour la ligne 'Pour colCounter2 = colCounter + 1 To Selection.Columns.Count'? Désolé, je devrais avoir mentionné que ci-dessus – MattCrum