PROGRAMME VBA

jacksa3ada Messages postés 37 Statut Membre -  
jacksa3ada Messages postés 37 Statut Membre -
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. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. jacksa3ada Messages postés 37 Statut Membre
       
      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
      0
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  4. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jacksa3ada Messages postés 37 Statut Membre
     
    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à
    0
  7. jacksa3ada Messages postés 37 Statut Membre
     
    ca marche ....merci beaucoup

    vous etes un genie!
    chapeau

    !
    0
  8. jacksa3ada Messages postés 37 Statut Membre
     
    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!
    0
  9. jacksa3ada Messages postés 37 Statut Membre
     
    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
    0
  10. ThauTheme Messages postés 1564 Statut Membre 160
     
    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

    0
  11. jacksa3ada Messages postés 37 Statut Membre
     
    re
    merci , 1000 fois merci pour ton aide
    0
  12. jacksa3ada Messages postés 37 Statut Membre
     
    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
    0