XL 2013 Utilisation de la fonction "Case" dans VBA

AnjyD

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide, car je n'arrive pas à faire fonctionner ma macro. Alors je cherche a copier et coller mes valeurs dans une feuille précise à un endroit précis dans mon classeur. C'est-à-dire que dans ma première cellule "A1" de la feuille Valeur Brute je sélectionne ma feuille. Et dans la cellule "R3" je sélectionne le tableau dans lequel je souhaite coller mes données. (Plus précisément je sélectionne mon immersion dans la cellule Q3, ce qui correspond à un numéro de tableau qui se trouve en "R3".
Ainsi pour que ma macro fonctionne il faut que je sélectionne ma feuille puis le tableau dans lequel je souhaite insérer mes données.
Je me retrouve donc avec une macro comprenant 2 conditions.
De ce fait, j'ai décidé d'utiliser le fonction Case afin de ne pas avoir trop de ligne de code et éviter tout bug.
Je tiens à préciser que la macro que j'ai joint a la discussion est seulement valable quand le tableau sélectionné est 1. Je comptais faire de même dans le cas de Tableau= 2, 3, 4,...etc mais du coup cela ne fonctionne pas.
Pourtant les noms des feuilles sont corrects et quand j'exécute ma macro je n'ai pas de message qui dit que quelque chose ne vas pas. Concrètement il ne se passe rien lorsque j'exécute ma macro.

Du coup, si vous pouviez m'aider car cela fait littéralement 3 jours que j'essaye de trouver une solution à ce problème.

Je vous remercie d'avance.











VB:
Sub TEST_COPIER_COLLER()
'
' Macro permettant de copier et de coller des données dans différentes feuilles à des endroits précis
'

'Les feuilles (Palier axiale, Palier axiale-1, ...) sont identiques c'est pour ça que les cordonnées sont identiques
'Cette maccro est un exemple dans le cas ou Tableauau = 1




Dim x As Worksheet
Dim Choix As String 'La cellule Choix contient une liste déroulante contenant les différentes feuilles
Dim Tableau As String 'La cellule Tableau indique la position ou coller les valeurs. (1,2,3,4,5 et 6) Chaques nombres correcpond à des position précise dans la feuille.




Choix = Sheets("Valeur BRUT").Range("A1").Value
Tableau = Sheets("Valeur BRUT").Range("R3").Value



Select Case Choix
       Case Tableau
            
    Case (Choix = "Palier axiale") And (Tableau = 1)
        With Sheets("Palier axiale")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-1") And (Tableau = 1)
        With Sheets("Palier axiale-1")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-2") And (Tableau = 1)
        With Sheets("Palier axiale-2")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-3") And (Tableau = 1)
        With Sheets("Palier axiale-3")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-4") And (Tableau = 1)
        With Sheets("Palier axiale-4")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-5") And (Tableau = 1)
        With Sheets("Palier axiale-5")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case (Choix = "Palier axiale-6") And (Tableau = 1)
        With Sheets("Palier axiale-6")
            .Range("C3:C63").Value = Sheets("Valeur BRUT").Range("A4:A64").Value
            .Range("D3:E63").Value = Sheets("Valeur BRUT").Range("C4:D64").Value
        End With
    
    Case Else
        MsgBox ("Attention il y a une erreur!")

End Select

Sheets("Valeur BRUT").Range("I7").Value = ""

End Sub
 

Pièces jointes

  • Macro Test.xlsm
    708 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
Bonjour

Je pense que tu te compliques la tache pour rien
1) il me semble que l'utilisation d'un Select case ne te permet pas de faire une evaluation dans le case
dans ton cas, l'évaluation correspond à choix="...." AND (tableau = ....)

2) si j'ai bien compris, le choix = cellule A1 de la feuille Brute correspond à la feuille destination
pas besoin de case: il suffit de dire sur quelle feuille tu souhaites coller les infos
with sheets(Choix)....

3) selon la valeur du tableau ton code ne permet pas de voir quelle différence ca fait==> en fait tous tes cases copient la meme zone au meme endroit..
de ce que je vois, toutes tes feuilles "Palier Axiale..." ont la meme structure et ont 6 tableaux (A, B C D E F)
tous ces tableaux sont strictement indentiques (78 lignes chacun)

donc, avec le numéro de table, on peut connaitre la première ligne de destination:
ce qui donnerait ce code
VB:
Sub TEST_COPIER_COLLER2()

Dim x As Worksheet
Dim Choix As String
Dim Table As String

With Sheets("Valeur BRUT")
    Choix = .Range("A1")
    Table = .Range("R3")
    TabColA = .Range("A4:A64").Value 'on place les données de la colonne A dans un tablo vba
    TabColC = .Range("C4:D64").Value 'on place les données des colonnes C et D dans un tablo vba
End With

With Sheets(Choix)
    FirstLineDest = (Table - 1) * 78 + 3
    .Range("C" & FirstLineDest).Resize(UBound(TabColA, 1), UBound(TabColA, 2)) = TabColA
    .Range("D" & FirstLineDest).Resize(UBound(TabColC, 1), UBound(TabColC, 2)) = TabColC
End With

End Sub
 

AtTheOne

XLDnaute Occasionnel
Supporter XLD
Bonjour à toutes & à tous, bonjour @AnjyD
Essaie avec ce code qui devrait fonctionner si tes tableaux ont le même emplacement dans chaque feuille
Mais attention tu ne traites que le cas Tableau = 1, et tu n'accèdes pas aux tableau 1 avec le choix en cellule P3.
Il faut compléter la macro pour les autres tableaux et sans doute revoir tes feuilles "Liste" et "Saisie"


Enrichi (BBcode):
Sub TRANSFERER()

    Dim x As Worksheet
    Dim FeuilleCible As String 'La cellule Choix contient une liste déroulante contenant les différentes feuilles
    Dim Tableau As String 'La cellule Tableau indique la position ou coller les valeurs. (1,2,3,4,5 et 6) Chaques nombres correcpond à des position précise dans la feuille.
    
    With ThisWorkbook.Worksheets("Valeur BRUT")
        FeuilleCible = .Range("A1").Value
        Tableau = .Range("R3").Value
        Valeurs1 = .Range("A4:A64").Value
        Valeurs2 = .Range("C4:D64").Value
    End With
    
    'Vérification de l'existance de la feuille "FeuilleCible"
    FeuilleExiste = ""
    On Error Resume Next
    FeuilleExiste = ThisWorkbook.Worksheets(FeuilleCible).Name
    On Error GoTo 0
    If FeuilleExiste = "" Then
        MsgBox "Attention la feuille " & FeuilleCible & " n'existe pas"
        Exit Sub
    End If
    
    Select Case Tableau
                
        Case Is = 1
            With Sheets(FeuilleCible)
                .Range("C3:C63").Value = Valeurs1
                .Range("D3:E63").Value = Valeurs2
            End With
        
        Case Is = 2
            With Sheets(FeuilleCible)
            End With
        
        Case Is = 3
            With Sheets(FeuilleCible)
            End With
        
        Case Is = 4
            With Sheets(FeuilleCible)
            End With
        
        Case Is = 5
            With Sheets(FeuilleCible)
            End With
        
        Case Is = 6
            With Sheets(FeuilleCible)
            End With
        
        Case Else
            MsgBox ("Attention il y a une erreur!")
    
    End Select
    
    Sheets("Valeur BRUT").Range("I7").Value = ""
    
End Sub

Amicalement
Alain
 

vgendron

XLDnaute Barbatruc
De ce fait, j'ai décidé d'utiliser le fonction Case afin de ne pas avoir trop de ligne de code et éviter tout bug.

il y a quand meme une incohérence entre ce que tu écris vouloir faire et toutes les macros identiques redondantes...
Chaque macro est dupliquée 6 fois !!
tu as meme deux macros qui portenet le meme nom "TEST_COPIER_COLLER"=> Ca, c'est interdit

Je te suggère d'expliquer ton besoin
quelles données vont où en fonction de quoi... et je suis sur qu'on saura te proposer une macro simple et efficace
 

AtTheOne

XLDnaute Occasionnel
Supporter XLD
Bonjour @vgendron
Comme je suis un peu lent, nos posts se sont entremêlés, je pense que ce que je propose dans le post #4 devrait convenir, si le choix en cellule P3 permet bien de désigner un cas prévu (tableau 1, 2, 3, 4, 5, 6) ...
Mais ton post #2 donne une solution plus compacte et sans select Case
Amicalement
Alain
 

Statistiques des forums

Discussions
298 770
Messages
1 971 601
Membres
203 412
dernier inscrit
elrico22