fusion de 5 onglets

heho13

XLDnaute Occasionnel
Bonjour,

je n'arrive pas à fusionner les onglets, je ne comprends pas la macro

Pouvez vous regarder ?

je ne cherche pas à supprimer les doublons.

merci
 

Pièces jointes

  • LPM.xlsm
    361.1 KB · Affichages: 54

DoubleZero

XLDnaute Barbatruc
Re : fusion de 5 onglets

Bonjour, heho13, le Forum,

La macro ne peut agir à cause de l'appellation erronée des onglets.

Remplacer celle-ci :

Code:
Sub synthese()
  Set onglet1 = Sheets("Vm")
  Set onglet2 = Sheets("VC")
  Sheets("recap").[A2:D10000].ClearContents
  Range(onglet1.[A2], onglet1.[A65000].End(xlUp).Offset(0, 2)).Copy Sheets("recap").[A2]
  For Each c In Range(onglet2.[A2], onglet2.[A65000].End(xlUp))
    p = Application.Match(c, [A:A], 0)
    If IsError(p) Then
      [A65000].End(xlUp).Offset(1, 0) = c
      [A65000].End(xlUp).Offset(0, 1) = c.Offset(0, 1)
      [A65000].End(xlUp).Offset(0, 3) = c.Offset(0, 2)
    Else
      [A1].Offset(p - 1, 3) = c.Offset(0, 2)
    End If
  Next c
End Sub

par celle-là :

Code:
Sub synthese()
  Set onglet1 = Sheets("VM")
  Set onglet2 = Sheets("VC")
  Sheets("RECAP").[A2:D10000].ClearContents
  Range(onglet1.[A2], onglet1.[A65000].End(xlUp).Offset(0, 2)).Copy Sheets("RECAP").[A2]
  For Each c In Range(onglet2.[A2], onglet2.[A65000].End(xlUp))
    p = Application.Match(c, [A:A], 0)
    If IsError(p) Then
      [A65000].End(xlUp).Offset(1, 0) = c
      [A65000].End(xlUp).Offset(0, 1) = c.Offset(0, 1)
      [A65000].End(xlUp).Offset(0, 3) = c.Offset(0, 2)
    Else
      [A1].Offset(p - 1, 3) = c.Offset(0, 2)
    End If
  Next c
End Sub

A bientôt :)
 

Staple1600

XLDnaute Barbatruc
Re : fusion de 5 onglets

Bonjour à tous

EDITION: Bonjour 00 ;)
On traite cinq onglets ou deux ? Le titre du fil dit 5, la macro dit 2 :confused:

heho1313
Quelles lignes ne comprends-tu pas ?
On voit déjà que la macro ne s'occupe que de deux onglets (c'est écrit dans le code ;) )
Donc pour 5 onglets il faudra adapter.
Tu veux faire quoi au juste ?
Copier les données des 5 onglets à "la queue leu leu" dans une feuille Recap?
Code:
Sub synthese()
  Set onglet1 = Sheets("Vm")
  Set onglet2 = Sheets("VC")
  Sheets("recap").[A2:D10000].ClearContents
  Range(onglet1.[A2], onglet1.[A65000].End(xlUp).Offset(0, 2)).Copy Sheets("recap").[A2]
  For Each c In Range(onglet2.[A2], onglet2.[A65000].End(xlUp))
    p = Application.Match(c, [A:A], 0)
    If IsError(p) Then
      [A65000].End(xlUp).Offset(1, 0) = c
      [A65000].End(xlUp).Offset(0, 1) = c.Offset(0, 1)
      [A65000].End(xlUp).Offset(0, 3) = c.Offset(0, 2)
    Else
      [A1].Offset(p - 1, 3) = c.Offset(0, 2)
    End If
  Next c
End Sub

PS: As-tu demandé assistance à Xavier M. ? (auteur du fichier)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : fusion de 5 onglets

Re

00
La casse semble ne pas être un problème ;)
Sub testcasse()
MsgBox Sheets("VM").Name & " Casse pas OK"
MsgBox Sheets("Vm").Name & " Casse OK"
End Sub

heho1313
Tu as regardé dans les archives du forum?
Car il y a plein de discussions qui causent de ta question.
Il suffirait d'adapter l'existant à ta propre problématique.
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : fusion de 5 onglets

Re-bonjour, bonjour Staple1600 :D,

...On traite cinq onglets ou deux ? Le titre du fil dit 5, la macro dit 2 :confused:...

J'ai pensé comme toi... et suggère ce code :

Code:
Option Explicit
Sub Onglets_fusionner()
    Dim o As Worksheet
    Application.ScreenUpdating = False
    Sheets("RECAP").Range(Range("a2"), Range("j2").End(xlDown)).Clear
    For Each o In Worksheets
        If o.Name <> "RECAP" Then
            With o
                .Range(.Range("a3"), .Range("j3").End(xlDown)).Copy Destination:=Sheets("RECAP").Range("a65536").End(xlUp)(2)
            End With
        End If
    Next
    Application.ScreenUpdating = True
End Sub

A bientôt :)
 

Staple1600

XLDnaute Barbatruc
Re : fusion de 5 onglets

Re

On est dimanche, on peut donc refaire ce qui a déjà été maintes fois ici publié. ;)
Une autre façon de l'écrire
(Au préalable, on aura pris soin de copier les lignes d’entêtes sur la feuille RECAP
donc une ligne vide, plus la ligne "violette")

PS: Test OK sur le fichier exemple, donc inutile de dire que cela ne fonctionne pas
ou alors écrire: je n'arrive pas à faire fonctionner sur mon pc ;)


Code:
Sub a()
Dim ws As Worksheet, dl&, dlig&
For Each ws In Worksheets
If Len(ws.Name) <= 3 Then
dl = ws.Cells(Rows.Count, 1).End(xlUp).Row
dlig = Sheets("RECAP").Cells(Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(3, 1).Resize(dl, 10).Copy Sheets("RECAP").Cells(dlig, 1)
End If
Next ws
End Sub

00:
Avec le xlDown si il y un trou* dans le tableau, il y aura des surprises ;)
(*: des lignes vides , ce qui crée de zones non contiguës)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : fusion de 5 onglets

Re

heho13
Tu n'as pas essayé ma proposition?
Il y aussi un message d'erreur? ;)


Sinon je me substitue momentanément à 00
o pour objet, je presume ;)

Essaies avec cette petite modif (ou essaies ma macro -> voir plus bas dans le fil)
(Il restera encore ici le possible souci du XlDown ;) )
Code:
Sub Onglets_fusionnerII()
    Dim o As Worksheet
    Application.ScreenUpdating = False
    Sheets("RECAP").Rows("3:65536").Clear
    For Each o In Worksheets
        If o.Name <> "RECAP" Then
            With o
                .Range(.Range("a3"), .Range("j3").End(xlDown)).Copy Destination:=Sheets("RECAP").Range("a65536").End(xlUp)(2)
            End With
        End If
    Next
    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : fusion de 5 onglets

Re-bonjour,

... j'ai erreur de syntaxe : Dim o As Worksheet, le o correspond à quoi ?..

En tête de procédure, la mention :

Code:
Option Explicit

rend la déclaration des variables obligatoire.

C'est la raison pour laquelle il est précisé, dans le code :

Code:
Dim o As Worksheet

Pour en savoir davantage sur le thème des variables, je te suggère de consulter ce lien.

A bientôt :)
 

Discussions similaires

Réponses
1
Affichages
170

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 111
dernier inscrit
Eric68350