Je suis vraiment nouveau dans le codage VBA, actuellement j'ai une feuille de calcul contient des groupes et des comptes à différents niveaux, suivant sont un exemple simple:meilleure boucle pour mon VBA Tâche
Groupe codes sont tous les numéros et compte codes commencent par 3 lettres, disons ABC suivi par 2 ou 3 chiffres, donc un exemple serait ABC100, les 2 premiers codes de lettre de compte sont toujours les mêmes, à savoir "AB" dans l'exemple, donc un autre le code de compte pourrait être ABS80. Les codes du groupe/compte se trouvent dans une colonne distincte correspondant aux groupes/comptes .
Mon objectif est de mettre en place une macro qui me fournirait un résumé, dans un onglet séparé appelé dire résultats, de tous les groupes (UNIQUEMENT) au-dessus d'une donnée compte/Groupe dans la hiérarchie arbre, avec le sujet compte/groupe sur le fond. Donc pour illustrer en utilisant l'exemple ci-dessus. Si le sujet compte est ABC100
, puis après l'exécution de la macro, je pense voir dans les résultats onglet:
Jusqu'à présent, je réussi à obtenir la macro pour trouver la position de le sujet compte dans la hiérarchie et copiez cette ligne dans l'onglet « résultats. Mais je suis coincé à l'étape suivante qui consiste à extraire uniquement les groupes de niveau supérieur directement (en même temps ignorer les comptes & groupes entre) et les coller dans l'onglet résultats.
Je sais que j'ai besoin d'utiliser la boucle et essayé For Next
avec If Then
instruction entre, mais continue à recevoir des messages d'erreur. Vraiment apprécier si quelqu'un pourrait me conduire à la bonne direction sur quelle boucle à utiliser.
Merci!Voici mes codes actuels:
Sub SearchRelevantAccGp()
'
' This macro finds the account or group and provides a summary of all affected groups
' within the Hierarchy
Dim searchvalue As Variant
searchvalue = Sheets("Dashboard").Range("B2")
Dim hierarchy As Integer
Sheets("Main Tree").Select
cells.Find(What:=searchvalue, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
hierarchy = ActiveCell.Offset(0, 5)
Dim startref As Variant
startref = "I" & ActiveCell.Row
Dim rownumber As Integer
rownumber = ActiveCell.Row
ActiveCell.EntireRow.Select
Selection.Copy
Sheets("Result").Select
Rows(hierarchy).Select
ActiveSheet.Paste
Sheets("Main Tree").Select
Range(startref).Select
For i = rownumber To 2 Step -1
If cells(i - 1, 9).Value - 1 = cells(i, 9).Value And cells(i - 1, 3).Value = "Group" Then
Rows(i).Select
Selection.Copy
Sheets("Result").Select
Rows(hierarchy - 1).Select
ActiveSheet.Paste
End If
Next i
End Sub
Merci beaucoup Paul pour la solution. Je suppose que le résultat final est le même dans ce cas. Je vais essayer de mettre en œuvre les codes et de voir si cela résout mon problème. – Jay
Salut Paul, j'ai testé le code et malheureusement cela n'a pas fonctionné comme prévu. Je pense que ce qui a mal tourné, c'est la façon dont le code définit le «groupe». Vous pouvez voir dans mon fichier d'origine que s'il s'agit d'un code de compte (ABC100) dans la colonne B, la colonne A affichera "Compte" au lieu de "Groupe", ce qui est le cas dans votre capture d'écran. Quand je lance la macro, elle affiche uniquement la ligne d'en-tête et la ligne 'find'. De plus, la fonction 'find' ne se base pas sur la correspondance de la valeur entière de la cellule, donc si je devais trouver "ABC10" par exemple, le compte "ABC109" apparaîtrait s'il se trouvait au-dessus de "ABC10". Merci! Jay – Jay
J'ai fait les changements que vous avez mentionnés: il vérifie le mot "Group" dans la colonne A, et la fonction 'Find' regarde la valeur entière de la cellule - si vous recherchez" ABC10 "il ne retournera pas la valeur" ABC109 " –