Explication Excel Si autrement pour la copy de données avec des cases à cocher

J'aimerais configurer un code pour copyr des cellules avec des cases à cocher

J'ai 30 cases à cocher

J'ai copié le code ci-dessous et l'ai modifié 30 fois

C'est sans doute redondant

Chaque checkbox est sur une ligne, datatables qu'il copyra sont sur la même ligne

Lorsque la checkbox est cliquée, datatables de la ligne dans la cellule suivante seront copiées et déplacées ailleurs

Ces données seront déposées quelque part ci-dessous dans la même feuille de travail

J'ai essayé de créer les déclarations elseif, malheureusement elles n'ont pas fonctionné

If ThisWorkbook.Worksheets(1).Shapes("Check Box 2").OLEFormat.Object.Value = 1 Then Range("f2").Select Selection.Cut Sheets("Sheet1").Select Range("f15").Select ActiveSheet.Paste Range("f15").Select Selection.Insert Shift:=xlDown End If End Sub If ThisWorkbook.Worksheets(1).Shapes("Check Box 3").OLEFormat.Object.Value = 1 Then Range("f3").Select Selection.Cut Sheets("Sheet1").Select Range("f15").Select ActiveSheet.Paste Range("f15").Select Selection.Insert Shift:=xlDown End If End Sub If ThisWorkbook.Worksheets(1).Shapes("Check Box 4").OLEFormat.Object.Value = 1 Then Range("f4").Select Selection.Cut Sheets("Sheet1").Select Range("f15").Select ActiveSheet.Paste Range("f15").Select Selection.Insert Shift:=xlDown End If End Sub 

C'est très répétitif comme vous pouvez le voir

Tout conseil sur la façon dont je peux écrire ce code de sorte que ce soit comme une déclaration if nestede

Si la checkbox 1 est vraie, procédez comme suit si la checkbox 2 est vraie, etc …

[IMG] http://i44.tinypic.com/2db78dj.jpg [/ IMG]

merci merci

Sans savoir un peu plus sur la structure du classur, c'est le meilleur que je peux proposer. Il existe probablement une sorte de «relation» entre les CheckBoxes et la ou les cellules qui doivent être exploitées, ce qui pourrait vous permettre d'utiliser une formule ou une autre logique pour déterminer les cellules à couper / coller, plutôt que de countr sur Si / puis ou la logique Case.

 Sub Test() Dim cb As Shape Dim cutRange As Range '## The destination doesn't change, so we put this outside the loop ' also make it a constant value: Cosnt destRange As Ssortingng = "F15" '## Now, iterate over each checkbox control in the sheet: For Each cb In ActiveSheet.Shapes '## Make sure the shape is an xlCheckBox AND value = True/checked If cb.FormControlType = xlCheckBox And cb.OLEFormat.Object.Value = 1 Then '## Assign the cutRange based on the CheckBox name Select Case cb.Name Case "Check Box 2" Set cutRange = Range("F3") Case "Check Box 3" Set cutRange = Range("F4") Case "Check Box 4" Set cutRange = Range("F5") 'etc. '## You can add as many Case values as you need End Select '## One statement cuts & inserts: cutRange.Cut Range(destRange) Range(destRange).Insert Shift:=xlDown End If Next End Sub