PROGRAMME VBA

jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -  
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -
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

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
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
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
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
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
ca marche ....merci beaucoup

vous etes un genie!
chapeau

!
0
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
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
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
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
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
re
merci , 1000 fois merci pour ton aide
0
jacksa3ada Messages postés 36 Date d'inscription   Statut Membre Dernière intervention  
 
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