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 :

Manipulation d'une plage de cellule vers une autre feuille [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 48
    Par défaut Manipulation d'une plage de cellule vers une autre feuille
    Bonjour le forum et à vous tous,

    J'ai un soucis de logique conceptuelle dans une manipulation que je souhaite réalisée et j'aurai besoin de vos lumières.
    J'ai pour source un Range(A1 : H12) soit un tableau de 8 colonnes et 12 lignes en feuille 1 que je dois copier vers la destination feuille 2. Mon soucis de réflexion se situe au moment de ma copie.
    La première copie se déroule sans accros vers (A1 : H2). Les données de ma source sont modifiées, je dois alors de nouveau copier le Range source en position 2 soit (I1 : P12); nouvelle modification des données copie en position 3 (Q1 : X12).
    Une fois 3 copies effectuées, je dois changer d'indice et toujours avec le même pas. (A13 : H24), (I13 : P24), (Q13 : X24) et ainsi de suite.

    Quelle serait la méthode la plus simple et rapide pour gérer cette copie, l'utilisation de plusieurs variables (Xx : Yy) avec incrémentation ou une toute autre méthode de type Offset?

    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il est possible de passer par un tableau interne, que tu remplis directement avec 36 colonnes et autant de lignes nécessaires, mais la boucle risque d'être un peu imbuvable

    méthode plus simple :

    1) On part de la feuille de destination, en A1
    2) On fait trois copies en se décalant à chaque fois
    3) Après trois copies, on revient en colonne A mais on décale de 12 lignes

    voici une proposition où tu dois juste indiquer la plage de départ, le nombre de copies et combien de copies sur la même ligne doivent être effectuées, le reste se calcule via ces trois éléments

    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
    Sub Traitement()
    Dim Source As Range, Destination As Range, Iterations As Long, NombreCopies As Long, i As Long
    Set Source = ThisWorkbook.Worksheets("Feuil2").Range("A1:H12")  ' Plage à Copier
    Set Destination = ThisWorkbook.Worksheets("Feuil1").Range("A1") ' Première position de la destination
    NombreCopies = 10 ' par exemple !
    Iterations = 3 ' 3 copies avant de se décaler vers le bas
        For i = 1 To NombreCopies   ' pour chaque copie
            Source.Copy Destination ' ben on copie Source vers Destination !
     
            If i Mod Iterations = 0 Then ' si on vient de copier l'itération
                ' on se décale en ligne et on revient en colonne A
                Set Destination = Destination.Offset(Source.Rows.Count, -(Iterations - 1) * Source.Columns.Count)
            Else
                ' sinon on se décale en colonne
                Set Destination = Destination.Offset(0, Source.Columns.Count)
            End If
        Next i
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 48
    Par défaut
    Bonjour joe,

    Merci de ta réponse aussi prompte. Le code fournit fonctionne parfaitement. Cependant, je ne connais pas à l'avance le nombre de copies qui seront effectuées.
    Pour compléter les informations précédentes, les données de mon tableau source en feuille 2 sont modifiés pendant un cycle, à chaque fin de cycle je dois copier ce tableau à différents indices (A1;H12), (I1;P12),(Q1;X12),(A13;H24),(I13;P24),(Q13;X24) et ainsi de suite, les uns à la suite des autres. C'est pourquoi il n'est nécessaire de créer à l'avance un nombre définit de tableaux. D'où ma question originelle sur la meilleure méthode à adopter pour réaliser ce code.

    Merci à vous.

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 48
    Par défaut
    Bonjour,

    J'ai trouvé la solution en me basant sur ton code dont voici le résultat.

    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
    Dim TabOrigin() As Variant
    Dim Source, Destination As Range
    Dim i, x As Integer
     
        Set Source = ThisWorkbook.Worksheets("Feuil1").Range("A1:H12")
        TabOrigin = Array("A", "I", "Q")
        For x = 1 To 25
            For i = 0 To 2
            Set Destination = ThisWorkbook.Worksheets("Feuil2").Cells(x, TabOrigin(i))
                Source.Copy Destination
            Next i
            x = x + 11
        Next x
     
    End Sub
    Après je ne suis pas certain que mon code soit très propre. ^^
    Merci joe pour ta précieuse aide.

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si la seule chose à modifier c'est la variable NombreCopies (ici fixée en dur à 10 copies), alors il suffit simplement de fixer ce nombre dynamiquement par une boite de dialogue où renseigner la quantité de copies


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NombreCopies = Application.InputBox("Nombre copies à réaliser ?", , 1, , , , , 1)
    soit certain que c'est bien un nombre entier qui est saisi .... sinon je t'invite à sécuriser cette ligne de code afin que la procédure ne plante pas pour "incompatibilité de type"



    EDIT : nos posts se sont croisés.

    Ton x, représentant le nombre de copies, est encore écrit en dur ... et tu indiquait que justement le problème était que le nombre de copies n'était pas connu à l'avance ?

  6. #6
    Membre averti
    Inscrit en
    Février 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 48
    Par défaut
    Tu dis vrai pour l'instant il est en dur le temps de finir le développement et de ne traiter que de petites portions du code final.
    A terme, x sera en effet dynamique par rapport à l'un des paramètres généraux qui viendra s'y greffer.
    Merci beaucoup d'avoir répondu aussi rapidement à ma problématique.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/06/2015, 14h42
  2. [XL-2007] InputBox pour sélectionner cellule ou une plage de cellules dans une feuille.
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2014, 19h01
  3. [XL-2002] Copie d'une plage de colonne vers une plage d'une autre colonne
    Par Canidé dans le forum Excel
    Réponses: 1
    Dernier message: 16/01/2014, 05h48
  4. Réponses: 4
    Dernier message: 20/04/2012, 20h49
  5. exporter une plage de cellules vers un fichier texte
    Par VINCENTNINI dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/10/2007, 08h12

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