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_reco

Merci 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 compris ce matin, ça devait être la fatigue.

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 C'est grâce à votre forum que j'ai pu apprendre et progresser en VBA, je trouve quasi-toujours la solution dans un sujet !

Problème résolu !

Rechercher des sujets similaires à "probleme select case imbrique beaucoup"