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 :

Besoin d'aide sur Excel VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Par défaut Besoin d'aide sur Excel VBA
    Salut à tous.
    Je suis sur un projet et en tant que débutant sur Excel VBA, il y'a certaines choses que je n'arrive pas à faire. C'est pourquoi j'ai fait un fichier exemple pour mieux vous présentez mon besoin.
    Dans mon classeur joint, j'ai 4 feuilles : Impressions, Photocopies, Scans, Rapport.
    Dans la feuille "Impression", il y'a la plage "plage1"
    Dans la feuille "Photocopies", il y'a la plage "plage2"
    Dans la feuille "Scans", il y'a la plage "plage3"

    Je souhaite donc avec un code VBA sous forme d'un rapport à la fin de chaque mois, envoyé les données des 3 plages (plage1, plage2, plage3) dans la feuille Rapport selon l'ordre que j'ai faite dans cette feuille (Rapport)

    Comment faire ?
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour copier une plage de cellules vers une autre plage, on utilise la méthode Copy de l'objet Range en utilisant son argument Destination
    En supposant que vous ayez nommé la plage 1 "PlageImpression" à l'aide du gestionnaire des noms et que la première cellule de la plage à coller dans la feuille nommée "Rapport" est la cellule C5

    Le code sera par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      With ThisWorkbook
       Range("PlageImpression").Copy Destination:=.Worksheets("Rapport").Range("B3")
      End With
    End Sub
    Exemple pour copier 3 plages nommées vers 3 adresses cibles de la feuille nommée Rapport

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t()
      Dim s As Variant
      Dim t As Variant
      Dim e As Byte
      s = Array("PlageImpression", "PlagePhotocopie", "PlageScan") ' Nom des plages sources
      t = Array("C5", "C20", "C35")                                ' Adresse des premières cellules cibles
      With ThisWorkbook.Worksheets("Rapport")
       For e = 0 To UBound(s)
         Range(s(e)).Copy Destination:=.Range(t(e))
       Next
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti Avatar de kodyone
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2024
    Messages : 15
    Par défaut
    Bonjour
    Philippe Tulliez
    Merci beaucoup pour votre contribution.
    Avant tout, j'ai essayé votre code en utilisant mes données comme Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub t()
      Dim s As Variant
      Dim t As Variant
      Dim e As Byte
      s = Array("plage1", "plage2", "plage3") ' Nom des plages sources
      t = Array("B5", "B20", "B35")           ' Adresse des premières cellules cibles
      With ThisWorkbook.Worksheets("Rapport")
       For e = 0 To UBound(s)
         Range(s(e)).Copy Destination:=.Range(t(e))
       Next
      End With
    End Sub
    Ça me renvoi un message d'erreur : "La méthode 'Range' le l'objet 'Worksheet' a échoué"

    En plus, pour ce qui est des cellules cibles, je ne l'ai connais pas d'abord car comme c'est un travail mensuel, il se peut que la plage 1 "plage1" prenne beaucoup de lignes, avec la méthode de copie que vous avez donné, je voulais un alignement des plages comme suit :
    La plage (plage1) est sur la celule ("B5")
    La plage (plage2) est sur la dernière ligne+2 lignes de la plage (plage1)
    Il en est de même de la plage (plage3) pour la plage (plage2)

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ça me renvoi un message d'erreur : "La méthode 'Range' le l'objet 'Worksheet' a échoué"
    Sans connaître le numéro de la ligne où a lieu le bug, il est difficile d'apporter de l'aide

    En plus, pour ce qui est des cellules cibles, je ne l'ai connais pas d'abord car comme c'est un travail mensuel, il se peut que la plage 1 "plage1" prenne beaucoup de lignes, avec la méthode de copie que vous avez donné, je voulais un alignement des plages comme suit :
    La plage (plage1) est sur la celule ("B5")
    La plage (plage2) est sur la dernière ligne+2 lignes de la plage (plage1)
    Il en est de même de la plage (plage3) pour la plage (plage2)
    Si vous distillez vos informations au compte-gouttes, nous n'allons pas nous en sortir.
    Dans ce cas, nul besoin de nommer les plages sources et, pour charger les données quel que soit le nombre de lignes du tableau, on utilisera la propriété CurrentRegion, qui est l'équivalent du raccourci clavier Ctrl + *.
    Pour que cela fonctionne, il est nécessaire de conserver au minimum une ligne de titre commençant à la cellule définie par la constante a (ici B5) dans les feuilles sources.

    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 t()
      Const Ecart As Byte = 2  ' Nombre de ligne séparant les tableaux collés
      Const A As String = "B5" ' Adresse de la première cellule de chaque feuille
      Const TargetSheetName As String = "Rapport"
      Dim s As Variant
      Dim e As Byte
      Dim l As Variant
      Dim rng As Range
      s = Array("Impressions", "Photocopies", "Scans") ' Nom des feuilles
     
      With ThisWorkbook
      .Worksheets("Rapport").Cells.Clear ' Supprime les données
       For e = 0 To UBound(s)
         Set rng = .Worksheets(s(e)).Range(A).CurrentRegion
         With .Worksheets(TargetSheetName)
          If rng.Rows.Count > 1 Then
            rng.Copy Destination:=.Range(A).Offset(l)
            l = l + rng.Rows.Count + Ecart
          End If
         End With
       Next
      End With
      Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. besoin d'aide sur Excel VBA
    Par Hellhound dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/04/2020, 08h22
  2. besoin d'aide sur Excel VBA
    Par Hellhound dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/04/2020, 19h07
  3. [XL-2007] Besoin d aide sur code vba
    Par alexandrek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2011, 17h10
  4. Besoin d'aide sur excel
    Par fabien59420 dans le forum Excel
    Réponses: 8
    Dernier message: 26/06/2008, 15h28

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