Problème avec un Select Case imbriqué (et beaucoup de if)
Bonjour,
Je suis débutant dans les macros VBA et j'aurai besoin d'une second vision
J'ai un soucis pour passer dans tous mes "Select Case", il passe directement au "End Select" :/
Si j'ajoute un "End Select" il me dit qu'il est inutile, si je le mets pas il me dit qu'il y en a pas ...
For nb_ligne_reco = 1 To Dernligne
'Lecture Case Z
action_cmd = LCase(Range("Z" & nb_ligne_reco).Value)
Application.Calculation = xlCalculationManual
Select Case opt
Case Is = "Destination"
Select Case action_cmd
Case Is = "create"
If Range("V" & nb_ligne_reco).Value = 0 Then
create_link_dest:
Rows(nb_ligne_reco).Copy
Workbooks(ref_fich).Worksheets(1).Activate
derdesder = Range("B" & Rows.Count).End(xlUp).Row + 1
Rows(derdesder).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
Case Is = "modify"
Set ligne_corres = Nothing
If (Range("X" & nb_ligne_reco).Value > "0" And ((Range("V" & nb_ligne_reco).Value = "0"))) Then
Rows(nb_ligne_reco).Select
Selection.Copy
Set ligne_corres = Sheets(1).Columns(20).Find(What:=Range("T" & nb_ligne_reco), LookIn:=xlValues)
End If
If ligne_corres Is Nothing And Range("V" & nb_ligne_reco).Value = "0" Then
GoTo create_link_dest
End If
Set ligne_corres = Sheets(1).Columns(20).Find(What:=Range("T" & nb_ligne_reco), LookIn:=xlValues)
If ((ligne_corres <> "Nothing") And (Range("V" & nb_ligne_reco).Value = "0")) Then
ligne_corres = ligne_corres.Row
Workbooks(ref_fich).Worksheets(1).Activate
'Rows(ligne_corres).Delete
Rows(ligne_corres).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
Case Is = "delete"
Set ligne_corres = Nothing
If (Range("V" & nb_ligne_reco).Value = 1) Then
Set ligne_corres = Sheets(1).Columns(19).Find(What:=Range("S" & nb_ligne_reco), LookIn:=xlValues)
ligne_corres = ligne_corres.Row
Workbooks(ref_fich).Worksheets(1).Activate
Rows(ligne_corres).Delete
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
Case Is = "Subdestination"
Case Is = "create"
If Range("V" & nb_ligne_reco).Value = 0 Then
create_link_sdest:
Rows(nb_ligne_reco).Copy
Workbooks(ref_fich).Worksheets(1).Activate
derdesder = Range("B" & Rows.Count).End(xlUp).Row + 1
Rows(derdesder).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
Case Is = "modify"
Set ligne_corres = Nothing
If (Range("V" & nb_ligne_reco).Value = "0") Then
Rows(nb_ligne_reco).Select
Selection.Copy
Set ligne_corres = Sheets(1).Columns(20).Find(What:=Range("T" & nb_ligne_reco), LookIn:=xlValues)
End If
If ligne_corres Is Nothing And Range("V" & nb_ligne_reco).Value = "0" Then
GoTo create_link_sdest
End If
Set ligne_corres = Sheets(1).Columns(20).Find(What:=Range("T" & nb_ligne_reco), LookIn:=xlValues)
If ((ligne_corres <> "Nothing") And (Range("V" & nb_ligne_reco).Value = "0")) Then
ligne_corres = ligne_corres.Row
Workbooks(ref_fich).Worksheets(1).Activate
'Rows(ligne_corres).Delete
Rows(ligne_corres).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
Case Is = "delete"
Set ligne_corres = Nothing
If (Range("V" & nb_ligne_reco).Value = 1) Then
Set ligne_corres = Sheets(1).Columns(19).Find(What:=Range("S" & nb_ligne_reco), LookIn:=xlValues)
ligne_corres = ligne_corres.Row
Workbooks(ref_fich).Worksheets(1).Activate
Rows(ligne_corres).Delete
Workbooks(ref_fich).Worksheets(2).Activate
nb_para = nb_para + 1
End If
End Select
Next nb_ligne_recoMerci beaucoup
Bonjour,
c'est juste une erreur de logique et ce serait plus simple en formulant littéralement
les critères d'une manière claire & exhaustive car là, sans décodeur …
En fait je fais un script ou je dois identifier l'option de la ligne:
- Dest
- SDest
et après je dois identifier si cette dernière doit être ajoutée / modifiée / supprimée afin de lui allouer le traitement voulue.
Ajout : Identification de la dernière ligne et Copier/coller
Modification : Identification de la ligne du paramètre et Copier/coller
Suppression : Identification de la ligne du paramètre et suppression
Pour ceci, j'utilise des Select Case parce que le traitement est different selon l'option (pas les mêmes colonnes voir exigences).
Je veux pouvoir faire évoluer pour rajouter des options, donc j'aurai voulu savoir pourquoi mon second Select ne marche pas.
J'avais mis le même traitement pour toutes les options mais je peux pas, je suis obligé d'adapter le traitement à ce moment là.
Je sais pas si j'ai répondu comme tu le souhaitais à ta question ^^'
Merci d'avance !
Utiliser le mode pas à pas via la touche F8 pour faire progresser le code
tout en contrôlant le contenu de la fenêtre des Variables locales, cela devrait aider à comprendre …
Je suis débutant en VBA mais je connais le mode débug
J'ai donc mis un Select Case en dessous de la premier option et je l'ai fermé avant la deuxième puis j'ai mis un autre Select Case à nouveau pour les options.
Pour résumer :
Select Case opt
opt1
Select Case action_cmd
action1
action2
action3
End Select (action_cmd)
opt2
Select Case action_cmd
action1
action2
action3
End Select (action_cmd)
End Select (opt)En tout cas, merci de tes réponses rapides
Problème résolu !