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 :

Macro copier-coller en boucle sur plusieurs onglets


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Par défaut Macro copier-coller en boucle sur plusieurs onglets
    Bonjour,

    Je débute le VBA pour mener à bout un projet de calcul d'investissement sur Excel.
    Je souhaite principalement réaliser des opérations de copier-coller par plages de cellules sur plusieurs onglets.
    Ces copier-coller sont soumis également à conditions (généralement que les données comprises dans des plages de cellules ne soient pas égales à 0).

    Voici tout d'abord mon code en entier :

    Code vb : 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
    40
    Sub Investment()
     
    Dim i As Integer, j As Integer, m As Integer, n As Integer, p As Integer
     
    m = 16
    n = 40
    p = 2
    Worksheets("OD").Range("D16:AB25").Value = 0
    Worksheets("OD").Range("D40:AB49").Value = 0
     
    For q = 4 To Sheets.Count - 1
     Worksheets("OD").Range("D144:AB144").Copy
     Worksheets(q).Range("D71:AB71").Paste
    Next
     
    For j = 2016 To 2040
     For i = 4 To Sheets.Count - 1
      If Worksheets("OD").Range("D" & m & ":AB" & m).Value <> 0 And Worksheets("OD").Range("D" & n & ":AB" & n).Value <> 0 Then
       m = m + 1
       n = n + 1
       p = p + 1
      Else
       Worksheets(i).Activate
       Worksheets(i).Range("C7").Value = j
       If Worksheets(i).Range("D76").Value > 0 Then
        Worksheets(i).Range("D43:AB43").Copy
        Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & m & ":AB" & m)
        Worksheets(i).Range("D43:AB43").Copy
        Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & n & ":AB" & n)
        Worksheets(InvYear).Range("B" & p).Value = j
       Else
       End If
       m = m + 1
       n = n + 1
       p = p + 1
      End If
     Next
    Next
     
    End Sub

    Plusieurs problèmes se posent face à mon inexpérience :
    - Une incompatibilité de type sur le bout de code :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("OD").Range("D" & m & ":AB" & m).Value <> 0 And Worksheets("OD").Range("D" & n & ":AB" & n).Value <> 0
    Pourtant les cellules sont bien au format nombre sur Excel. Je pense que le problème peut venir du fait que c'est une plage de cellule.

    - "Propriété ou méthode non gérée par cet objet" pour :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(q).Range("D144:AB144").Paste

    - Erreur d'execution que je comprends pas encore :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & m & ":AB" & m)
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & n & ":AB" & n)
    Je souhaite ici coller les valeurs copiées dans l'onglet "OD" dans les plages de cellules D16:AB16 (car ici n=16) et D40:AB40 (car ici n=40).

    Je joins mon fichier en valeurs à ce message, même s'il est assez vaste.
    Je précise que je suis débutant (je commence à peine le VBA, même si j'ai des bases dans quelques autres langages).

    Pour l'idée générale de mon code VBA dans mon fichier excel.
    Je veux tout d'abord que les cellules des plages D16:AB25 et D40:AB49 de l'onglet "OD" soient égales à 0.

    Puis je veux copier la plage de cellules de l'onglet "OD" D144:AB144 et la coller sur les cellules D71:AB71 de tous les onglets Invest01 jusqu'à Invest10.

    Pour le reste c'est un peu plus compliqué, mais l'idée est la même, toujours des copier-coller de plages de cellules. La boucle for sur i est là pour réaliser ces copier-coller sur les différents onglets, mais j'ai l'impression que ca ne marchera pas comme cela.

    Pourriez-vous m'aider s'il vous plait?

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '   copier la plage de cellules de l'onglet "OD" D144:AB144
    '   et la coller sur les cellules D71:AB71 des onglets Inv01 jusqu'à Inv10 :
     
        For i = 1 To 10
            Range("OD!D144:AB144").Copy Range("Inv" & Format$(i, "00") & "!D71:AB71")
        Next
    Pour effectuer la somme d'une plage de cellules, utiliser Application.Sum(Range(…))

    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Bonjour,

    - Une incompatibilité de type sur le bout de code :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("OD").Range("D" & m & ":AB" & m).Value <> 0 And Worksheets("OD").Range("D" & n & ":AB" & n).Value <> 0
    Tu ne peut pas demander la valeur d'une plage de cellules, que cherche tu as tester exactement avec ton <>0? si l'une des cellules de la plage est nulle? ou bien si toutes sont nulles?

    - "Propriété ou méthode non gérée par cet objet" pour :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(q).Range("D144:AB144").Paste
    Essaye avec .PasteSpecial

    - Erreur d'execution que je comprends pas encore :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & m & ":AB" & m)
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("OD").Paste Destination:=Worksheets("OD").Range("D" & n & ":AB" & n)
    "Destination" s'utilise après un .copy pas après une .paste

Discussions similaires

  1. [XL-2010] Macro pour comparer des prix sur plusieur onglets
    Par cecev76 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/08/2015, 23h02
  2. [XL-2003] aide sur macro copier coller
    Par young 25 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/04/2010, 20h06
  3. N'autoriser que le copier-coller par valeur sur un onglet
    Par LentilleLocale dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/11/2008, 22h46
  4. N'autoriser que le copier-coller par valeur sur un onglet
    Par LentilleLocale dans le forum Excel
    Réponses: 3
    Dernier message: 02/11/2008, 13h31
  5. Macro exécutée sur plusieurs onglets
    Par Aizen64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/06/2007, 09h59

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