Faire des instructions en fonction de la valeur d'une case

Max80250 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
Gyrus Messages postés 3360 Statut Membre -
Bonjour,

Je souhaites en VBA appliquer des instructions en fonction de la valeur d'une cellule qui est variable

J'ai tenté d'utiliser l'instruction If Then Else avec ElseIF en fonction des valeurs que peut prendre ma cellule
Mais cela ne marche pas la première OK mais après ça plante : on arrive de suite à l'instruction Else
Je souhaiterais utiliser éventuellement Select Case mais je ne vois pas bien comment ni la syntaxe
ce que je veux faire :
If G2 = "6xxxxxx" Then
Range("I1:K30").Select
Selection.Copy
Windows("MSAP.xls").Activate
Range("c3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

et dans la suite j'ai :
If G2='7xxxxxx" Then
Range("I1:K15").Select
Selection.Copy
Windows("MSAP.xls").Activate
Range("c25").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Le fait en fonction de la cellule G2 l'instruction qui suit est différentes : zone de copie et de collage

Comment faire
Merci de votre aide

5 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Tu peux essayer avec ce code

    Sub Test()
    Dim Plage As Range, C As Range
    Select Case Range("G2").Value
    Case "6xxxxxx"
    Set Plage = Range("I1:K30")
    Set C = Workbooks("MSAP.xls").Worksheets("Feuil1").Range("C3")
    Case "7xxxxxx"
    Set Plage = Range("I1:K15")
    Set C = Workbooks("MSAP.xls").Worksheets("Feuil1").Range("C25")
    Case Else
    Exit Sub
    End Select
    Copier Plage, C
    End Sub
    Sub Copier(Plage As Range, C As Range)
    Plage.Copy
    C.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Application.CutCopyMode = False
    End Sub

    A+
    0
  2. Max80250 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour

    Merci de vos précisions
    J'avais omis de dire que je travaille sur un réseau et que de plus je travaille avec deux fichier qui sont ouverts
    et que j'ai déjà une macro qui effectue un certain nombre de tris avant de terminer par la sélection de données et sa copie

    et je bute sur la fonction
    Set C = Workbooks("MSAP.xls").Worksheets("Feuil1").Range("C3")

    Je me demande s'il ne faut pas simplement activer le fichier dans ma macro

    Une nouvelle fois je fais appel à vous
    A+
    0
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    En règle générale, il est préférable d'éviter l'activation ou la sélection d'objet.
    Lorsque tu écris
    Set C = Workbooks("MSAP.xls").Worksheets("Feuil1").Range("C3")
    Tu indiques explicitement que la variable C représente la cellule C3 de la feuille "Feuil1" du classeur "MSAP.xls".
    Tu peux alors utiliser les propriétés et méthodes de l'objet Range : C.value, C.copy, etc .

    A+
    0
  4. Max80250 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour

    Merci j'ai bien saisi le role des commandes

    Comme maintenant ma macro bute sur la fin de la procédure je vais apporter quelque précision

    J'ai inclus les infos précisées dans nos échanges dans ma macro
    j'avais déjà un Sub d'ouverture et j'ai donc supprimé le
    Sub Test()
    J'ai continué à saisir mes variables
    Dim Plage As Range, C As Range
    Select Case Range("G2").Value
    Case "6021"
    Set Plage = Range("I1:K30")
    Set C = Workbooks("MSAP.xls").Worksheet("Feuil1").Range("C3")
    Case "6029"
    Set Plage = Range("I1:K22")
    Set C = Workbooks("MSAP.xls").Worksheet("Feuil1").Range("C32")
    ----------etc avec 26 plages différentes
    Case Else
    Exit Sub
    End Select
    Copier Plage, C

    Copier(Plage As Range, C As Range)
    Plage.Copy
    C.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Application.CutCopyMode = False
    Et la maintenant ma macro s'arrête à Copier Plage,C
    Je n'ai pas de fin se Sub car ma macro doit s'arrêter à la fin
    Est ce du a ce que je n'ai recréer un Sub Copier Plage, C et est ce que dans une macro on peut avoir plusieurs Sub et que la macro se poursuive normalement

    Je suis un peu short sur le sujet
    Merci de votre aide
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Dans la procédure principale, tu fais appel à la procédure Copier qui est une autre procédure chargée de copier la plage. C'est une procédure distincte qui commence par sub ... et finit par End Sub.

    A+
    0