XL 2013 Utilisation de plusieurs conditions

AnjyD

XLDnaute Nouveau
Bonjour;

Je sollicite une nouvelle fois votre aide. Alors j'ai créé des lignes de code afin de copier coller des données dans une feuille spécifique. C'est-à-dire que cette macro permet de coller mes données dans la feuille que j'aurais préalablement choisie.

Exemple Dans "A1" si je sélectionne "Pallier axiale-1"via ma liste déroulante, mes données sont censées se coller dans "Pallier axiale-1".

Mais il se trouve qu'automatiquement mes valeurs vont se coller dans la dernière page créée. Quel que soit le choix de la feuille que j'aurais fait dans la cellule A1 (ma liste déroulante.
Je vous remercie d'avance pour votre aide.

Veuillez trouver ma macro ci-dessous:

VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
    If Choix = "Palier axiale" Then
    Sheets("Valeur BRUT").Select
    Range("A8:A68").Select
    Selection.Copy
    Sheets("Palier axiale").Select
    Range("A4").Select
    ActiveSheet.Paste
    Range("B4").Select
    Sheets("Valeur BRUT").Select
    Range("C8 : D68").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Palier axiale").Select
    ActiveSheet.Paste
    Range("N4").Select
    Sheets("Valeur BRUT").Select
    Range("I7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
   
    ElseIf Choix = "Palier axiale-1" Then
    Sheets("Valeur BRUT").Select
    Range("A8:A68").Select
    Selection.Copy
    Sheets("Palier axiale-1").Select
    Range("A4").Select
    ActiveSheet.Paste
    Range("B4").Select
    Sheets("Valeur BRUT").Select
    Range("C8 : D68").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Palier axiale-1").Select
    ActiveSheet.Paste
    Range("N4").Select
    Sheets("Valeur BRUT").Select
    Range("I7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
   
    ElseIf Choix = "Palier axiale-2" Then
    Sheets("Valeur BRUT").Select
    Range("A8:A68").Select
    Selection.Copy
    Sheets("Palier axiale-2").Select
    Range("A4").Select
    ActiveSheet.Paste
    Range("B4").Select
    Sheets("Valeur BRUT").Select
    Range("C8 : D68").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Palier axiale-2").Select
    ActiveSheet.Paste
    Range("N4").Select
    Sheets("Valeur BRUT").Select
    Range("I7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
   
    Else
    Sheets("Valeur BRUT").Select
    Range("A8:A68").Select
    Selection.Copy
    Sheets("Palier axiale-3").Select
    Range("A4").Select
    ActiveSheet.Paste
    Range("B4").Select
    Sheets("Valeur BRUT").Select
    Range("C8 : D68").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Palier axiale-3").Select
    ActiveSheet.Paste
    Range("N4").Select
    Sheets("Valeur BRUT").Select
    Range("I7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
   
   
    End If

End Sub

PS: Je tiens a préciser que si je viens vers vous c'est que j'ai fait des recherches au préalable, mais qu'aucunes des solutions que j'ai trouvées n'a fonctionnées.
 
Dernière modification par un modérateur:
Solution
re,

avec un fichier, c'est tout de suite mieux pour une réponse plus adaptée !

Cordialement, @+
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
With Sheets("Valeur BRUT")
    Select Case .Range("A1").Value2
        Case Is = "Palier axiale"
            Sheets("Palier axiale").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale").Range("B4:C64").Value = .Range("C8:D68").Value
        Case Is = "Palier axiale-1"
            Sheets("Palier axiale-1").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale-1").Range("B4:C64").Value = .Range("C8:D68").Value
        Case Is = "Palier axiale-2"
            Sheets("Palier axiale-2").Range("A4:A64").Value = .Range("A8:A68").Value...
Bonjour Anjy2, le forum

Voila votre code re écrit, sans tester car il n'y a pas de fichier.
Mettez votre code dans des balises </>, c'est beaucoup plus lisible.
Les select sont inutiles pour copier des valeurs, on ne le répète jamais assez.
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
Select Case ActiveSheet.choix.Text
    Case Is = "Palier axiale"
        With Sheets("Palier axiale")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Is = "Palier axiale-1"
        With Sheets("Palier axiale-1")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Is = "Palier axiale-2"
        With Sheets("Palier axiale-2")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Else
        With Sheets("Palier axiale-3")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
End Select
Sheets("Valeur BRUT").Range("I7").Value = ""
End Sub
On pourrait simplifier si l'on était sûr que la combo choix est bien au départ dans la sheet "Valeur BRUT" mais rien dans votre code ne permet de l'affirmer.

Bien cordialement, @+
 

AnjyD

XLDnaute Nouveau
Bonjour Anjy2, le forum

Voila votre code re écrit, sans tester car il n'y a pas de fichier.
Mettez votre code dans des balises </>, c'est beaucoup plus lisible.
Les select sont inutiles pour copier des valeurs, on ne le répète jamais assez.
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
Select Case Me.choix.Text
    Case Is = "Palier axiale"
        With Sheets("Palier axiale")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Is = "Palier axiale-1"
        With Sheets("Palier axiale-1")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Is = "Palier axiale-2"
        With Sheets("Palier axiale-2")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
    Case Else
        With Sheets("Palier axiale-3")
            .Range("A4:A64").Value = Sheets("Valeur BRUT").Range("A8:A68").Value
            .Range("B4:D64").Value = Sheets("Valeur BRUT").Range("C8:D68").Value
        End With
End Select
Sheets("Valeur BRUT").Range("I7").Value = ""
End Sub
On pourrait simplifier si l'on était sûr que la combo choix est bien au départ dans la sheet "Valeur BRUT" mais rien dans votre code ne permet de l'affirmer.

Bien cordialement, @+
Bonjour,

Je te remercie pour ta réponse. Et j'ai bien compris tes ligne de code et c'est vrai qu'écris comme ça c'est beaucoup plus compréhensible. Mais du coup après avoir appliquée cette macro à mon fichier, il se trouve que j'ai le même résultat. C'est-à-dire que les donnée vont automatiquement se coller sur la dernière feuille.

Je vous joint mon fichier.
 

Pièces jointes

  • FICHIER.xlsm
    101.9 KB · Affichages: 2
re,

avec un fichier, c'est tout de suite mieux pour une réponse plus adaptée !

Cordialement, @+
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
With Sheets("Valeur BRUT")
    Select Case .Range("A1").Value2
        Case Is = "Palier axiale"
            Sheets("Palier axiale").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale").Range("B4:C64").Value = .Range("C8:D68").Value
        Case Is = "Palier axiale-1"
            Sheets("Palier axiale-1").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale-1").Range("B4:C64").Value = .Range("C8:D68").Value
        Case Is = "Palier axiale-2"
            Sheets("Palier axiale-2").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale-2").Range("B4:C64").Value = .Range("C8:D68").Value
        Case Else
            Sheets("Palier axiale-3").Range("A4:A64").Value = .Range("A8:A68").Value
            Sheets("Palier axiale-3").Range("B4:C64").Value = .Range("C8:D68").Value
    End Select
    .Range("I7").Value = ""
End With
End Sub
 
Dernière édition:
re,

comme, dans votre choix de feuille, vous avez les quatre choix possibles et uniquement ceux là (y compris Sheets("Palier axiale-3").), vous pouvez simplifier en enlevant le select case, pas besoin d'une condition Else :

Cordialement, @+
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
With Sheets("Valeur BRUT")
    Sheets(.Range("A1").Value2).Range("A4:A64").Value = .Range("A8:A68").Value
    Sheets(.Range("A1").Value2).Range("B4:C64").Value = .Range("C8:D68").Value
    .Range("I7").Value = ""
End With
End Sub
 
Re,

D'ailleurs, on peut encore simplifier par :
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
Sheets(Sheets("Valeur BRUT").Range("A1").Value2).Range("A4:C64").Value = Sheets("Valeur BRUT").Range("A8:A68,C8:D68").Value
Sheets("Valeur BRUT").Range("I7").Value = ""
End Sub
et si vous lancez toujours la macro de la feuille "Valeur BRUT", on peut enlever la précision de la feuille, les ranges non précisés se référant par défaut à la feuille active.
VB:
Sub PasRetrait1()
'
' PasRetrait1 Macro
'

'
Sheets(Range("A1").Value2).Range("A4:C64").Value = Range("A8:A68,C8:D68").Value
Range("I7").Value = ""
End Sub

Cordialement, +
 
Dernière édition:

Discussions similaires