PROGRAMME VBA

Bonjour,

j'ai un classeur excel; et je désire copié les données de "p1 :bh1" de toute les feuilles de classeur, et les coller dans une feuille que j'ai appeler source

le problème et que quand je rajoute des feuilles, le programme colle les nouvelle données sur le mème tabelau

comment faire pour qu'il les rajoute au dessous des données existantes déjà dans la feuille "source" -sans ecraser les données -

que ce qu'il faut rajouter !!!

merci

voici la macro
Sub Source2()
'

'
' ACUALISER
' Dim Wsh As Worksheet, FeuilRecap As Worksheet, k As Integer

Set FeuilRecap = Worksheets("Source")
'feuille ou coller

k = FeuilRecap.Cells(Rows.Count, 1).End(xlUp).Row + 1
FeuilRecap.Rows(k).Clear
'autant débuter le "collage" à la seconde ligne

'boucle sur toutes les feuilles du classeur
For Each Wsh In ThisWorkbook.Worksheets
'Si la feuille (en cours dans la boucle) n'est pas la feuille récap alors

If Not Wsh Is FeuilRecap Then

'copié-collé
FeuilRecap.Rows(k).Clear
Wsh.Range("p1:bh1").Cut FeuilRecap.Rows(k)
'ligne suivante pour le collage

k = k + 1

End If

Next Wsh

End Sub

merci

11 réponses

  1. Bonjour Jack, bonjour le forum,

    Essaie comme ça :

    Sub macro1()
    Dim S As Worksheet 'déclare la variable S (onglet Source)
    Dim O As Worksheet 'déclare la variable O (Onglets)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
    
    Set S = Worksheets("Source") 'définit l'onglet source S
    S.Rows.Delete 'efface d'éventuelles anciennes données de l'onglet S
    For Each O In Sheets 'boucle sur tous les onglets O du claseur
        If O.Name <> S.Name Then 'condition : si l'onglet O n'est pas l'onglet S
            'défini la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onget S)
            Set DEST = IIf(S.Range("A1").Value = "", S.Range("A1"), S.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
            O.Range("P1:BH1").Copy DEST 'copie la plage P1:BH1 de l'onglet O et la colle dans DEST
        End If 'fin de la condition
    Next O 'prochaien onglet de la boucle
    End Sub

    1. bonjour
      merci de m avoir répondu si vite
      ça ne marche pas ! la macro efface tout ce que contient la feuille source !

      je ne sais pas ce qu'il faut rajouter a ma macro,pour qu'elle rajoute des donner a la derniere ligne , sinon elle marche bien
  2. Re,

    Oui désolé. J'ai pensé que c'est ça que tu voulais. le code modifié :

    Sub macro1()
    Dim S As Worksheet 'déclare la variable S (onglet Source)
    Dim O As Worksheet 'déclare la variable O (Onglets)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
    
    Set S = Worksheets("Source") 'définit l'onglet source S
    For Each O In Sheets 'boucle sur tous les onglets O du claseur
        If O.Name <> S.Name Then 'condition : si l'onglet O n'est pas l'onglet S
            'défini la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onget S)
            Set DEST = IIf(S.Range("A1").Value = "", S.Range("A1"), S.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
            O.Range("P1:BH1").Copy DEST 'copie la plage P1:BH1 de l'onglet O et la colle dans DEST
        End If 'fin de la condition
    Next O 'prochaien onglet de la boucle
    End Sub


    je me demande pourquoi je m'emm***e à commenter les code...

    1. Re
      il colle toute les valeurs de la plage "p1:bh1" de toute les feuille sur la premier ligne de la feuille source

      ...a la fin vous n'avez qu'une seul ligne! pas toutes les données!

      voilà
      1. ca marche ....merci beaucoup

        vous etes un genie!
        chapeau

        !
        1. Re,

          Pour définir la cellule de destination j'utilise la condition suivante : si A1 est vide alors cette cellule est A1, sinon c'est la première ligne vide de la colonne A. Donc si il colle toujours en A1 c'est qu'après le "coller" A1 reste vide. Cela signifie que P1 dans l'onglet source est vide.
          Mais pour éviter d'y passer des mois, il nous faudrait le fichier (voir avec par exemple http://www.cjoint.com)
          1. merci beaucoup, ça marche très très bien

            aide moi a faire une macro qui va supprimer toute les feuille sauf la feuille source! j'en ai besoin vraiment , parce que après l’actualisation j'en ai plus besoin,

            merci d'avance!
            1. Re,

              Essaie comme ça :

              Sub Macro1()
              Dim O As Worksheet 'déclare la variable O (Onglets)
              
              Application.DisplayAlerts = False 'n'affiche plus les message d'Excel
              For Each O In Sheets 'boucle sur tous les onglets O du classeur
                  If Not O.Name = "Source" Then O.Delete 'si le nom de l'onglet n'est pas "Source", supprime l'onglet
              Next O 'prochain onglet de la source
              Application.DisplayAlerts = False 'affiche les messages d'excel
              End Sub

              1. merci pour votre aide! ça marche

                mon programme est presque terminé!

                il me manque comment sélectionné toutes les feuilles d'un classeur.

                svp

                merci d'avance
                1. Re,

                  Essaie comme ça. Je pense qu'il y a beaucoup plus simple mais je n'y arrive pas autrement...

                  Sub Macro1()
                  Dim I As Byte 'déclare la variable I (Incrément)
                  Dim OS As Variant 'déclare la variable OS (OngletS)
                  
                  ReDim OS(1 To Sheets.Count) 'redimensionne le tableau OS (de 1 au nombre d'onglets dans le classeur)
                  For I = 1 To Sheets.Count 'boucle sur tous les onglets du classeur
                      OS(I) = Sheets(I).Name 'alimente le tableau OS avec le nom de l'onglet de la boucle
                  Next I 'prochain onglet de la boucle
                  Sheets(OS).Select 'sélectionne les onglets du tableau OS
                  End Sub

                  1. bonjour

                    j'ai modifie un petit peu, et ma base de donnes ainsi que mon tableau de bord fonctionnent tres bien,

                    j ai fais ça sur une feuille Excel

                    y'a t-il un moyen de cacher le programme pour que personne ne le modifie?

                    meme en allant a l'onglet affichage ...macro de la feuille excel??
                    !!
                    merci