Exécution d'une macro selon valeur cellule

Bonjour à tous à nouveau,

Je continue de bosser sur mon projet excel et j'ai à nouveau un petit défi. Bien que mon code d'un simple copier / coller fonctionne, je souhaite à présent faire un check entre le moment où je colle les données copiées dans le presse-papier et celui où les valeurs collées sont validées sur le tableau.

Le code original:

Sub COLLERNOMENCLATURE()

' Cette Macro colle la nomenclature 

If Application.ClipboardFormats(1) = -1 Then
MsgBox "LA NOMENCLATURE N'A PAS ÉTÉ COPIÉE!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "COPIE LA NOMENCLATURE ET RECOMMENCE.", vbCritical + vbOKOnly, "MESSAGE:"
End

Else

    Application.ScreenUpdating = False

    ' J'ouvre la feuille NOMENCLATURE et je colle depuis A1 la nomenclature copiée depuis l'ERP:

    Sheets("NOMENCLATURE").Visible = True
    Sheets("NOMENCLATURE").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    ' J'applique un filtre sur la colonne P 

    Range("A1:T1").Select
    Selection.AutoFilter
    Range("P1").Select
    ActiveSheet.Range("$A$1:$T$27").AutoFilter Field:=16, Criteria1:="FAB"

    ' J'applique un filtre sur la colonne O 

    Range("A1:T1").Select
    Selection.AutoFilter
    Range("O1").Select
    ActiveSheet.Range("$A$1:$T$27").AutoFilter Field:=15, Criteria1:="Composant"

    'Je copie les références, les numéros d'articles et les quantités et les colle dans SCAN

    Range("B2:B63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("B8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets("NOMENCLATURE").Select
    Range("T2:T63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("D8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Sheets("NOMENCLATURE").Select
    Range("K2:K63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("E8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Sheets("NOMENCLATURE").Select
    Range("C2:C63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("C8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Je referme la feuille Nomenclature afin qu'elle ne soit pas visible.

    Sheets("NOMENCLATURE").Select
    ActiveWindow.SelectedSheets.Visible = False

    Sheets("NOMENCLATURE").Visible = xlSheetVeryHidden

    Sheets("SCAN").Select

    End If

Application.ScreenUpdating = True

        'Je vide le presse-papier:
    Application.CutCopyMode = False

        'Je selectionne I8 pour commencer à scanner:
    Range("I8").Select

    ' Message final:

       Dim answer As Integer

answer = MsgBox(Range("R3") & ", LA NOMENCLATURE A CORRECTEMENT ÉTÉ COLLÉE. TU PEUX COMMENCER A SCANNER " & Range("I5"), vbInformation + vbOKOnly + vbDefaultButton2, "GESTION DES SCANS:")

If answer = vbOK Then

End If

End Sub

Maintenant, voici ce que je souhaite faire:

- Coller la nomenclature depuis le presse-papier

- Contrôler que la valeur de AT65 sur l'onglet NOMENCLATURE soit "OK"

- Si OK, continuer avec la macro

- Si KO message d'erreur et retour à l'onglet SCAN.

Voici mon code mais qui ne fonctionne pas !

Sub COLLERNOMENCLATURE()

' Cette Macro colle la nomenclature 

If Application.ClipboardFormats(1) = -1 Then
MsgBox "LA NOMENCLATURE N'A PAS ÉTÉ COPIÉE!" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "COPIE LA NOMENCLATURE ET RECOMMENCE.", vbCritical + vbOKOnly, "MESSAGE:"
End

Else

    Application.ScreenUpdating = False

Set target = Range("AT65")
If target.Value = "KO" Then

 MsgBox = "Erreur du collage"

Sheets("NOMENCLATURE").Select
    ActiveWindow.SelectedSheets.Visible = False

    Sheets("NOMENCLATURE").Visible = xlSheetVeryHidden

    Sheets("SCAN").Select

 End If

Else

If target.Value = "OK" Then

End If

    ' J'ouvre la feuille NOMENCLATURE et je colle depuis A1 la nomenclature copiée depuis l'ERP:

    Sheets("NOMENCLATURE").Visible = True
    Sheets("NOMENCLATURE").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    ' J'applique un filtre sur la colonne P 

    Range("A1:T1").Select
    Selection.AutoFilter
    Range("P1").Select
    ActiveSheet.Range("$A$1:$T$27").AutoFilter Field:=16, Criteria1:="FAB"

    ' J'applique un filtre sur la colonne O 

    Range("A1:T1").Select
    Selection.AutoFilter
    Range("O1").Select
    ActiveSheet.Range("$A$1:$T$27").AutoFilter Field:=15, Criteria1:="Composant"

    'Je copie les références, les numéros d'articles et les quantités et les colle dans SCAN

    Range("B2:B63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("B8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets("NOMENCLATURE").Select
    Range("T2:T63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("D8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Sheets("NOMENCLATURE").Select
    Range("K2:K63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("E8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

        Sheets("NOMENCLATURE").Select
    Range("C2:C63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("SCAN").Select
    Range("C8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Je referme la feuille Nomenclature afin qu'elle ne soit pas visible.

    Sheets("NOMENCLATURE").Select
    ActiveWindow.SelectedSheets.Visible = False

    Sheets("NOMENCLATURE").Visible = xlSheetVeryHidden

    Sheets("SCAN").Select

    End If

Application.ScreenUpdating = True

        'Je vide le presse-papier:
    Application.CutCopyMode = False

        'Je selectionne I8 pour commencer à scanner:
    Range("I8").Select

    ' Message final:

       Dim answer As Integer

answer = MsgBox(Range("R3") & ", LA NOMENCLATURE A CORRECTEMENT ÉTÉ COLLÉE. TU PEUX COMMENCER A SCANNER " & Range("I5"), vbInformation + vbOKOnly + vbDefaultButton2, "GESTION DES SCANS:")

If answer = vbOK Then

End If

End Sub

J'ai donc rajouter cette partie:

Set target = Range("AT65")
If target.Value = "KO" Then

Sheets("NOMENCLATURE").Select
    ActiveWindow.SelectedSheets.Visible = False

    Sheets("NOMENCLATURE").Visible = xlSheetVeryHidden

    Sheets("SCAN").Select

MsgBox = "Erreur du collage. Merci de recommencer"

 End If

Else

If target.Value = "OK" Then

End If

Voici le message d'erreur:

capture

Je reste bien entendu à dispo pour tout complément d'information.

Merci.

Pat.

Bonjour,

Bonjour BrunoM45,

voici un fichier très simplifié de l'original car l'autre à des infos que je ne peux publier.

Merci pour ton aide.

2classeur1.xlsm (61.63 Ko)

Bonjour PatPatrouille

Le problème ce situe ICI

image

Tu ne peux pas attribuer un = texte à un MsgBox, seulement comme ceci

Msgbox "Erreur de collage"

Voici le code optimisé

' Cette Macro colle la nomenclature
Sub COLLERNOMENCLATURE()
  ' Définir les variables
  Dim ShtS As Worksheet
  'Dim ShtN as Worksheet
  Dim Cel As Range
  ' Affecter l'objet feuille
  Set ShtS = ThisWorkbook.Sheets("SCAN")
  'Set ShtN = ThisWorkbook.Sheets("NOMENCLATURE")
  '
  If Application.ClipboardFormats(1) = -1 Then
    MsgBox "LA NOMENCLATURE N'A PAS ÉTÉ COPIÉE!" & vbCr & vbCr _
         & "COPIE LA NOMENCLATURE ET RECOMMENCE.", vbCritical + vbOKOnly, "GESTION DES SCANS:"
    Exit Sub
  End If
  Application.ScreenUpdating = False
  ShtS.Rows("7:71").EntireRow.Hidden = False
  ' J'ouvre la feuille NOMENCLATURE et je colle depuis l'ERP:
  With Sheets("NOMENCLATURE")
    .Visible = True
    .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                              SkipBlanks:=False, Transpose:=False
    Set Cel = .Range("AT65")
    If Cel.Value = "KO" Then
      MsgBox "Erreur du collage"
      .Visible = xlSheetVeryHidden
    Else
      ' J'applique un filtre sur la colonne P
      .Range("A1:T1").AutoFilter
      .Range("$A$1:$T$27").AutoFilter Field:=16, Criteria1:="FAB"
      ' J'applique un filtre sur la colonne O
      .Range("$A$1:$T$27").AutoFilter Field:=15, Criteria1:="Composant"
      'Je copie les réferences, les numéros d'articles et les quantités et les colle dans SCAN
      .Range("B2:B63").Copy
      ShtS.Range("B8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
      Sheets("NOMENCLATURE").Select
      .Range("T2:T63").Copy
      ShtS.Range("D8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
      .Range("K2:K63").Copy
      ShtS.Range("E8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
      .Range("C2:C63").Copy
      ShtS.Range("C8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
      ' Je referme la feuille Nomenclature afin qu'elle ne soit pas visible.
      .Visible = xlSheetVeryHidden
      'Je vide le presse-papier:
      Application.CutCopyMode = False
      'Je selectionne I8 pour commencer à scanner:
      Range("I8").Select
      ' Message final
      If MsgBox(Range("R3") & ", LA NOMENCLATURE A CORRECTEMENT ÉTÉ COLLÉE. TU PEUX COMMENCER A SCANNER L'OF " _
              & Range("I5"), vbInformation + vbOKOnly + vbDefaultButton2, "GESTION DES SCANS:") = vbOK Then
      End If
    End If
  End With
  Application.ScreenUpdating = True
End Sub

A+

Bonjour BrunoM45,

Tout d'abord un très grand merci pour ton retour et l'optimisation du code avec les variables. Beaucoup plus propre, beaucoup plus pro.

Il fonctionne bien. Si AT65 est OK tout se déroule correctement. En revanche, si AT65 marque KO il affiche bien le message d'erreur, il ne colle pas dans l'onglet "scan" mais il exécute le reste du code dont ShtS.Rows("7:71").EntireRow.Hidden = False

En fait, si AT65 est KO il faut le message d'erreur et retour sur l'onglet SCAN sans aucune autre action. Si AT65 est OK il faut exécuter le reste de la macro.

Je veux bien t'envoyer en privé le code complet si tu es bien d'accord.

Merci.

Salut PatPatrouille

mais il exécute le reste du code

Je ne comprends pas, le code exécuté est celui entre le If et le Else

Ne veut tu pas dire plutôt qu'il "doit exécuter" si KO !?

Merci de déposer ICI le fichier avec le code complet (je ne fais rien en MP)

A+

Re, et re-merci :-)

Voici à nouveau le fichier avec le code complet.

Pour te situer, si KO dans AT65 (Nomenclature) le reste du code ne doit pas être exécuté sauf bien entendu le message d'erreur. Hors, avec le code inclus dans le fichier, le message d'erreur apparaît et tout le reste du code est exécuté (sauf le collage depuis nomenclature à Scan).

Je souhaiterais te remercier pour ton aide. Je t'écrirai donc en MP pour cela.

Encore merci

Pat.

6classeur1.xlsm (66.73 Ko)

Re,

Désolé, mais cela fonctionne parfaitement de mon côté

A+

C'est tout bon, ça fonctionne parfaitement bien.

Merci une fois de plus pour ce petit cours d'optimisation avec les variantes :-) Je ne connaissais pas cela.

Petit message en privé pour te remercier.

Rechercher des sujets similaires à "execution macro valeur"