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

Fermé
Max80250 Messages postés 11 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 18 décembre 2013 - 13 déc. 2013 à 14:24
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 18 déc. 2013 à 19:28
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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
13 déc. 2013 à 16:39
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 18 décembre 2013
14 déc. 2013 à 18:58
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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
14 déc. 2013 à 19:59
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 vendredi 12 avril 2013 Statut Membre Dernière intervention 18 décembre 2013
18 déc. 2013 à 18:52
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 samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
18 déc. 2013 à 19:28
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