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

Max80250 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   -
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

Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   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
Max80250 Messages postés 11 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
Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   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
Max80250 Messages postés 11 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gyrus Messages postés 3334 Date d'inscription   Statut Membre Dernière intervention   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