IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Simplifier code VBA copier Coller


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut Simplifier code VBA copier Coller
    Bonjour, et merci à tous pour votre aide.

    1) Tout d'abord : J'aimerais simplifier le code ci-dessous (ici il n'y a que 2 "If" mais en fait il y en aurait au moins 30).
    En résumé en langage courant je voudrais qu'en fonction de la valeur de F16 (If F16=....) je puisse copier une plage donnée variable (30 variables environ qui peuvent être nommée par exemple "B38:J35" serait SAMICS6) pour la coller dans une autre plage nommée fixe (S1SA1).
    2) En BONUS Je souhaiterais aussi (dans la même macro si c'est possible??) qu'en fonction de la valeur de F17(If F17=...) je puisse aussi copier une plage donnée pour la coller dans une autre plage nommée fixe (S1SA2).
    Avez vous une idée pour simplifier ce code?
    Merci beaucoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub CREERSEANCE1()
    '
    ' CREERSEANCE1 Macro
    '
     
    '1ere situation
     
        If Range("F16").Value = "6" Then
    Sheets("SAMIC").Range("B38:J50").Copy
    Sheets("S1").Select
    Range("S1SA1").Select
    ActiveSheet.Paste
     
    End If
     
    If Range("F16").Value = "2" Then
       Sheets("SAMIC").Range("B53:J62").Copy
        Sheets("S1").Select
        Range("S1SA1").Select
        ActiveSheet.Paste
    End If
     
    '
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour myk636,

    30 x If = Select Case.
    Ainsi, regarde l'aide qui te guidera sur sa construction ou ici.

    Ensuite, supprime tes .Select.
    Exemple pour copier tes valeurs sur une autre range.
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("SAMIC").Range("B38:J50").Copy
    Sheets("S1").Select
    Range("S1SA1").Select
    ActiveSheet.Paste
    devient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("S1").Range("S1SA1").Value = Sheets("SAMIC").Range("B38:J50").Value
    Voila !
    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut
    Merci énormément de ton aide qui m'a permis de simplifier fortement le code.. MERCI sincèrement..
    J'essaye de le simplifier encore mais cela reste assez difficile : (dans le code je n'ai mis que 2 If encore au lieu de 30x4 probable
    )
    1) J'ai donc environ 30 variables du type S1, S2,....S30 ( ce sont des tableaux mis en forme identiquement : 9 colonnes et 15 lignes avec des fusions, etc... espacés de 2 lignes)
    2) Et j'ai 4 autres variables du type S1SA1 (S1SA2, S1SA3..)Dois je Définir l'ensemble des Valeurs des variables (ex : Set S1SA1 = Sheets("S1").Range("C27:K39") et S1=Sheets("SAMIC").Range("B38:J50") )) ou y'a t'il un moyen plus rapide de les définir avec les informations que je vous ai donné??

    MERCI encore pour votre aide
    Bonne soirée

    PS: je n'ai réussi à utiliser la fonction Select case dont vous m'aviez parlé ;(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub CREERSEANCE1()
    'Sub variables()
       'Déclaration des variables
       Dim SA1 As String, S1SA1 As Range, S1 As Range
       'S2 As Range
       'SA2 As String, SA3 As String
     
       'Valeurs des variables
    SA1 = Cells(16, 6)
    'SA2 = Cells(17, 6)
    'SA3 = Cells(18, 6)
    Set S1SA1 = Sheets("S1").Range("C27:K39")
    Set S1 = Sheets("SAMIC").Range("B38:J50")
    Set S2 = Sheets("SAMIC").Range("B53:J68")
     
    '1ere situation
    If SA1 = "1" Then
    S1SA1.Value = S1.Value
    ElseIf SA1 = "2" Then
    S1SA1.Value = S2.Value
     
    End If
    '
    End Sub
    MERCI

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Avec un Select Case et sans copie si les plage sont de même dimension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub CREERSEANCE1()
    '1ere situation
     
        Select Case Range("F16").Value
            Case "6"
                Sheets("S1").Range("S1SA1").Value = Sheets("SAMIC").Range("B38:J50").Value
     
            Case "2"
                Sheets("S1").Range("S1SA1").Value = Sheets("SAMIC").Range("B53:J62").Value
     
        End Select
     
    End Sub
    Quand tu poste un code, mets le entre les balises CODE (bouton #)

    Hervé.

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 21
    Par défaut
    Merci pour cette réponse qui fait avancer la simplification de ce code et ma compréhension de Select Case. MERCI

    Les codes fonctionnent parfaitement, toutefois j'avais oublié de préciser que le tableau (B38:J50 par exemple) contenait une image et donc lorsque j'utilise ce code il ne copie que la valeur des cellules (normal), comment puis-je faciliter la copie de l'image qui fait partie du tableau toujours en simplifiant ?
    Lorsque j'utilisais mon 1er code, il copiait bien l'image..

    Merci pour vos aides expérimentées..

    j'essaie de retravailler le code en trouvant des solutions qui marchent mais qui ne semblent pas optimales dans la mesure ou j'ai beaucoup de variables.
    Grâce à vous j'ai réussi à réécrire une partie du code qui me semblait beaucoup plus lisible...

    Peut on faire aussi simple pour copier une image (faisant partie du tableau)?

    Les formules du types S1SA1.Select ne semblent pas fonctionner malgré la déclaration des variables.. Dans le code suivant j'ai ajouté la copie d'une image (faisant partie du tableau).
    Peut on simplifier?
    MERci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub CREERSEANCE1()
       'Déclaration des variables
       Dim SA1 As String, S1SA1 As Range, S1 As Range
     
       'Valeurs des variables
    SA1 = Cells(16, 6)
    Set S1SA1 = Sheets("S1").Range("C27:K39")
    Set S1 = Sheets("SAMIC").Range("B38:J50")
    Set S2 = Sheets("SAMIC").Range("B53:J68")
     
      Select Case SA1
      Case "1"
      S1SA1.Value = S1.Value
       Sheets("SAMIC").Select
       ActiveSheet.Shapes.Range(Array("Picture 10")).Select
        selection.Copy
        Sheets("S1").Select
        Range("C30:G30").Select
        ActiveSheet.Paste
     
     
      Case "2"
    S1SA1.Value = S2.Value
    Sheets("SAMIC").Select
       ActiveSheet.Shapes.Range(Array("Image 7")).Select
        selection.Copy
        Sheets("S1").Select
        Range("C30:G30").Select
        ActiveSheet.Paste
     End Select
     
      Sheets("CYCLE").Select
    End Sub
    Merci infinimement
    Je cherche partout mais ne trouve pas vraiment ce dont j'ai besoin alors votre aide me fait gagner un temps précieux..
    MERCI

    Mick

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Effectivement, avec ".Value" = ".Value" seules les valeurs sont récupérées, pour l'image, il faut la copier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Sub CREERSEANCE1()
     
       'Déclaration des variables
        Dim S1SA1 As Range
        Dim S1 As Range
        Dim S2 As Range
        Dim SA1 As String
     
        'Valeurs des variables
        SA1 = Cells(16, 6)
        Set S1SA1 = Sheets("S1").Range("C27:K39")
        Set S1 = Sheets("SAMIC").Range("B38:J50")
        Set S2 = Sheets("SAMIC").Range("B53:J68")
     
        Application.CutCopyMode = False
        Select Case SA1
     
            Case "1"
                S1SA1.Value = S1.Value
                Sheets("SAMIC").Shapes("Picture 10").Copy
                Sheets("S1").Range("C30").PasteSpecial xlPasteAll
     
     
            Case "2"
                S1SA1.Value = S2.Value
                Sheets("SAMIC").Shapes("Image 7").Copy
                Sheets("S1").Range("C30").PasteSpecial xlPasteAll
     
        End Select
     
    End Sub
    Hervé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Aide sur code vba copier/coller
    Par youlig dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/03/2013, 11h28
  2. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  3. [PPT-2000] code vba pour coller en metafichier
    Par alex830001 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 02/12/2009, 08h23
  4. [XL-2007] VBA copier/coller image
    Par kaena dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/04/2009, 11h38
  5. code VBA copier coller
    Par AVNAIM dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 01/06/2008, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo