J'ai un formulaire utilisateur qui déplace des objets (noms d'employés) sur une feuille de calcul afin que les gestionnaires puissent déplacer des employés dans un département différent (regroupement de lignes différent sur la feuille de calcul) si nécessaire. Le problème que j'ai rencontré est que lorsque je définis la ligne initiale qui appartient au nom de l'employé, puis déplacez cette ligne via Selection.Cut et Selection.Insert Shift: = xlDown, je ne peux plus appeler le nouvel emplacement de la ligne employee , car cela a changé et toutes les lignes de code qui suivent reconnaissent toujours la première ligne d'employé identifiée dans le code de l'userform.Modification variable (longue) dans le sous-programme non mis à jour
Dim UserRow As Long
Dim UserMatrix As String
Dim CCIRow As Long
Dim CCIRange As String
Dim CEMRow As Long
Dim CEMRange As String
Dim MANRow As Long
Dim MANRange As String
UserRow = Application.WorksheetFunction.Match(UserName, Range("A1:A300"), 0)
UserMatrix = "B" & UserRow
CCIRow = Application.WorksheetFunction.Match("CCI/MDI", Range("A1:A300"), 0) + 1
Let CCIRange = "A" & CCIRow
CEMRow = Application.WorksheetFunction.Match("CE/Marketing", Range("A1:A300"), 0) + 1
Let CEMRange = "A" & CEMRow
MANRow = Application.WorksheetFunction.Match("Management", Range("A1:A300"), 0) + 1
Let MANRange = "A" & MANRow
OTHRow = Application.WorksheetFunction.Match("Other", Range("A1:A300"), 0) + 1
Sheet3.Rows(UserRow).Select
Selection.Cut
If UserDept = "CCI/MDI" Then
Sheet3.Rows(CCIRow).Select
Selection.Insert Shift:=xlDown
Sheet3.Range(UserMatrix).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Clear
Sheet3.Range("MATRIX_ROW").Select
Selection.Copy
Sheet3.Range(UserMatrix).Select
Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheet3.Range(CCIRange).Select
Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _
key1:=Range(CCIRange), order1:=xlAscending
End If
If UserDept = "CE/Marketing" Then
Sheet3.Rows(CEMRow).Select
Selection.Insert Shift:=xlDown
Sheet3.Range(UserMatrix).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Clear
Sheet3.Range("MATRIX_ROW").Select
Selection.Copy
Sheet3.Range(UserMatrix).Select
Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheet3.Range(CEMRange).Select
Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _
key1:=Range(CEMRange), order1:=xlAscending
End If
If UserDept = "Management" Then
Sheet3.Rows(MANRow).Select
Selection.Insert Shift:=xlDown
Sheet3.Range(UserMatrix).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Clear
Sheet3.Range("MATRIX_ROW").Select
Selection.Copy
Sheet3.Range(UserMatrix).Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial PASTE:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheet3.Range(MANRange).Select
Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Sort _
key1:=Range(MANRange), order1:=xlAscending
End If
Ma question: Est-il possible que je puisse mettre à jour la valeur d'une variable de dimension define (à savoir Dim) dans un sous-programme comme il change? Merci pour toute aide!
MERCI DE VOTRE CONFIANCE! Réinitialiser la dimension après le déménagement était exactement ce qui a résolu mon problème! Il se passe beaucoup de choses dans l'application que j'ai développée, et ce petit snipet me causait tellement de frustration. Je vous dois quelques bières mon ami !! – markddelorme
J'ai posté mon commentaire comme réponse, juste au cas où quelqu'un d'autre aurait le même problème à l'avenir. – YowE3K