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

Excel Discussion :

Copier coller plage de cellules dans une boucle For Each..Next [XL-2007]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur calcul structure
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur calcul structure
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Copier coller plage de cellules dans une boucle For Each..Next
    Bonjour le forum,

    J'ai tenté de mettre en place une boucle For Each ... Next qui me permet de changer la valeur d'une de mes cellules. A l'intérieur de cette boucle je lui demande de copier le tableau de valeur et de le coller sous ce même tableau. Après vérification, la boucle fonctionne dans le sens où elle fait correctement varier la cellule en prenant les 4 valeurs demandées. En revanche, le copier/coller ne fonctionne pas très bien. Le tableau se colle sur lui-même au lieu de se mettre à la suite. Pouvez-vous me dire ce qui ne va pas dans mon code?

    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 Copier_Clic()
    Dim Lig As Long
    Dim Table As Variant
     
     
    Application.ScreenUpdating = False
     
    For Each Table In Sheets("RDM").Range("AZ3:AZ6")
        Sheets("Interface").Range("D20") = Table
        Sheets("RDM").Range("A2:AX23").Copy
        Lig = 1 'première ligne à vérifier
        Do While Not IsEmpty(Sheets("RDM").Range("A" & Lig))
             Lig = Lig + 23
        Loop
        With Sheets("RDM").Range("A" & Lig)
              .PasteSpecial Paste:=xlPasteValues
              .PasteSpecial Paste:=xlPasteFormats
              .Application.CutCopyMode = False
        End With
     
    Next Table
     
    Application.ScreenUpdating = True
     
    End Sub
    Merci d'avance pour votre aide.

    Julie

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    For Each est fait pour scruter une collection.
    Range n'est pas une collection, c'est une zone.
    Pour scruter la collection des cellules contenues dans Range, il faut y ajouter Cells.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Table As Range
     
    For Each Table In Sheets("RDM").Range("AZ3:AZ6").Cells
    Que contient Sheets("RDM").Range("A1") ?

    Juste après ton Loop, place un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print "Destination Ligne : "&Lig
    Pour savoir ce que trouve ta boucle While.

    Etant donné que la source et la destination sont dans la même feuille, tu pourrais faire la copy en une seule ligne.
    Voir dans l'aide VBA intégrée à Excel, la syntaxe de la méthode Copy de l'objet Range.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    For Each est fait pour scruter une collection.
    Range n'est pas une collection, c'est une zone.
    Avec toutes mes excuses, mais je ne peux pas ne pas réagir...
    Range est une collection ! et une cellule seule est une collection qui comporte un seul élément.

    Donc Range ne comporte pas de "S" mais est une collection alors que Cells qui en comporte un n'est pas une collection, mais une propriété ... qui renvoie un objet Range et c'est cet objet collection renvoyé qu'on manipule au final

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub gogo()
    Dim cell As Range
    For Each cell In Range("B5:D10")
      cell.Value = "cf l'aide VBA"
    Next cell
    End Sub
    Nom : DGpass-01.jpg
Affichages : 1144
Taille : 11,2 Ko

    D'autre part For Each est aussi destiné à parcourir les tableaux.

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieur calcul structure
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur calcul structure
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Bonjour et merci pour vos réponses,

    Effectivement en ajoutant .cells cela ne change rien en revanche j'ai compris d'où venait mon erreur quand vous m'avez demandé ce qu'il y a en A1. Cette cellule n'est pas vide mais certaines cellules de mon tableau l'étaient. En rendant mes cellules non vide mon code fonctionne parfaitement mais par contre je conçois qu'il n'est peut-être pas optimisé je vais regarder plus attentivement dans l'aide pour voir si j'arrive à le condenser sinon je garderais celui là.

    Merci encore pour votre aide.

    Julie

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

Discussions similaires

  1. Chercher dans les valeurs d'une cellule dans une boucle For Next
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/09/2011, 15h30
  2. [XL-2003] Faire un somme dans une boucle for each
    Par tools dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/01/2011, 08h36
  3. ligne d'unecellule dans une boucle "for each"
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/01/2011, 14h03
  4. test avant d'entrer dans une boucle For each cell in selection
    Par totoro02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2009, 09h27
  5. comment effacer un element dans un collection dans une boucle for each
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/10/2008, 12h48

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