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 :

Copie cellule avec option [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut Copie cellule avec option
    Bonjour,

    j'ai 1 classeur Excel avec 2 feuilles. Je souhaite récupérer les données non vide de mon tableau de la feuille 1 et les copier dans mon tableau de la feuille 2 avec la mise en forme.
    La copie doit récupérer la contenu des cellules (non vide) du tableau 1 en le parcourant de gauche à droite, ligne par ligne pour les mettre de gauche à droite dans le tableau 2.

    Pour bien comprendre j'attache le classeur en question Classeur1.xlsm dans lequel j'ai fait à la main ce que je voudrais qu'il fasse tout seul via une macro (derrière un bouton).

    Merci à vous.

  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,

    je n'ai pas ouvert le fichier, ta problématique étant simple à présenter à l'écrit

    je note que tu veux prendre des cellules d'un Tableau1 en parcourant chaque ligne de gauche à droite
    mais tu dis vouloir les écrire dans Tableau2, uniquement de gauche à droite

    ce qui revient à dire que Tableau2 ne dispose que d'une ligne ? ça m'étonnerait, tu as du mal expliquer

    les tableaux sont dimensionnés de la même manière ou non ?
    qu'est ce qui empêcherait qu'on fasse simplement un copier de tableau1 dans tableau2 ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    tu as du mal expliquer
    D'où l’intérêt d'avoir mis un fichier d'exemple .

    Pour répondre à tes questions :
    Citation Envoyé par joe.levrai Voir le message
    ce qui revient à dire que Tableau2 ne dispose que d'une ligne ?
    Le tableau 2 disposent de plusieurs lignes qui devront être auto alimenté par la macro.

    Citation Envoyé par joe.levrai Voir le message
    les tableaux sont dimensionnés de la même manière ou non ?
    Non...

    Citation Envoyé par joe.levrai Voir le message
    qu'est ce qui empêcherait qu'on fasse simplement un copier de tableau1 dans tableau2 ?
    Le fait que les tableaux ne soient pas dimensionnés de la même manière et surtout qu'ils ne sont pas alimentés de la même manière.
    Tableau feuille 1 : fonctionne par colonne
    Tableau feuille 2 : fonctionne par ligne

    Merci !!!

  4. #4
    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
    On ne remplace pas un manque de clarté dans des explications par un fichier en pièce jointe

    je répète : ce problème s'explique simplement

    Regarde :

    Bonjour,
    je dispose d'un Tableau1 composé de 8 colonnes sur un nombre de X lignes
    je souhaiterais copier (avec Format) les valeurs de ses cellules qui ne sont pas vides, en partant de la première cellule et en allant de gauche à droite, à effectuer ligne par ligne

    la copie doit aller dans un Tableau2 qui est quand à lui composé de 12 colonnes
    la recopie doit se faire en partant de la première cellule et en allant de gauche à droite
    quand on a remplie la première ligne (= On a déjà copié 12 cellules du Tableau1), on passe à la ligne suivante

    Voici des données exemple, que j'adapterai ensuite à mes tableaux s'ils sont positionnés différemment :

    - Tableau 1 : les données sont sur la plage B4:I14 de "Feuil1"
    - Tableau 2 : la première cellule est en B4 de "Feuil2"

    Merci pour votre aide, et je suis désolé de ne pouvoir vous monter un début de code, je n'y arrive pas
    ce à quoi, j'aurai bien volontier répondu

    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 Changement()
    Dim Tablo
    Dim CellDest As Range
     
    Application.ScreenUpdating = False
    Set CellDest = Sheets("Feuil2").Cells(4, 2)
    With Sheets("Feuil1")
        Tablo = .Range(.Cells(3, 2), .Cells(14, 9))
        For i = LBound(Tablo, 1) To UBound(Tablo, 1)
            For j = LBound(Tablo, 2) To UBound(Tablo, 2)
                If Tablo(i, j) <> "" Then
                    .Cells(i + 2, j + 1).Copy
                    CellDest.PasteSpecial
                    Application.CutCopyMode = False
                    If CellDest.Column = 13 Then
                        Set CellDest = CellDest.Offset(1, -11)
                    Else
                        Set CellDest = CellDest.Offset(0, 1)
                    End If
                End If
            Next j
        Next i
    End With
    Application.ScreenUpdating = False
    End Sub
    A mettre sur un bouton

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut
    Effectivement, c'est plutôt clair !

    Le code est pleinement fonctionnel, merci à toi !

    Quoi qu'il en soit une dernière problématique vient se greffer (je vais essayer d'expliquer distinctement) :

    Le tableau de la feuille 1 n'est plus seulement composé de 8 colonnes et 12 lignes mais 16 colonnes et 12 lignes !
    Le problème est que ces 8 colonnes supplémentaires se situe sous le tableau actuel ( ce qui créé 2 tableaux)

    Le contenu des cellules a récupérer doit donc se faire ainsi :
    - de gauche à droite dans le tableau du haut, puis de gauche à droite dans le tableau du bas
    - on revient ensuite au tableau du haut et ainsi de suite.

    Entre les 2 tableaux il y a un ligne vide et une ligne avec mes intitulés de colonne.

    Je joints le classeur pour bien visualiser ma demande.Classeur1.xlsm

  6. #6
    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
    Là aussi ton explication est plutôt claire

    sans avoir ouvert ton fichier, voici une adaptation

    c'est un peu bourrin, mais si j'ai le temps je la simplifierai
    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
    34
    35
    36
    37
    38
    39
    Sub Changement()
    Dim Tablo
    Dim Tablo2
    Dim CellDest As Range
     
    Application.ScreenUpdating = False
    Set CellDest = Sheets("Feuil2").Cells(4, 2)
    With Sheets("Feuil1")
        Tablo = .Range(.Cells(3, 2), .Cells(14, 9))
        Tablo2 = .Range(.Cells(17, 2), .Cells(31, 9))
        For i = LBound(Tablo, 1) To UBound(Tablo, 1)
            For j = LBound(Tablo, 2) To UBound(Tablo, 2)
                If Tablo(i, j) <> "" Then
                    .Cells(i + 2, j + 1).Copy
                    CellDest.PasteSpecial
                    Application.CutCopyMode = False
                    If CellDest.Column = 13 Then
                        Set CellDest = CellDest.Offset(1, -11)
                    Else
                        Set CellDest = CellDest.Offset(0, 1)
                    End If
                End If
            Next j
            For j = LBound(Tablo2, 2) To UBound(Tablo2, 2)
                If Tablo2(i, j) <> "" Then
                    .Cells(i + 16, j + 1).Copy
                    CellDest.PasteSpecial
                    Application.CutCopyMode = False
                    If CellDest.Column = 13 Then
                        Set CellDest = CellDest.Offset(1, -11)
                    Else
                        Set CellDest = CellDest.Offset(0, 1)
                    End If
                End If
            Next j
        Next i
    End With
    Application.ScreenUpdating = False
    End Sub

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

Discussions similaires

  1. [XL-2010] Copie cellule avec format personnalisé
    Par bbell dans le forum Excel
    Réponses: 15
    Dernier message: 08/04/2013, 21h20
  2. commande qui copie fichier avec options
    Par pandora19 dans le forum C
    Réponses: 2
    Dernier message: 03/11/2012, 16h33
  3. [XL-2007] Modifier valeur de cellule avec Option button
    Par tiotsiaka dans le forum Excel
    Réponses: 1
    Dernier message: 04/05/2012, 19h06
  4. [XL-2000] MACRO copie cellules avec condition si
    Par Killie dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/01/2012, 11h27
  5. copie de cellule avec macro ne fonctionne pas
    Par dyjoca88 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2009, 17h46

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