Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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 ,

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

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
201
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…