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

Microsoft 365 Créer un synthèse de plusieurs onglets

cdric78

XLDnaute Junior
Bonjour,
Je fais appel à vous pour m'aider à réaliser quelques choses que je n'arrive pas à faire.
Je souhaite faire une synthèse de plusieurs onglets dans un seul onglet.

Je possède plusieurs onglets (CARR. 1, CARR.2, CARR. 3) mais ce nombre d'onglet sera évolutif (et le nommage des onglets ne conservera pas la structure "CARR. ?").
Je souhaite que l'onglet "Synthèse" reprenne les valeurs A1 et les valeurs présentes dans la colonne C si il y a un "1" en D sur la même ligne. Par exemple l'onglet synthèse ne devra pas affiché le contenu C10 de l'onglet CARR. 1 car il n'y a pas de 1 en D10.

Dans mon exemple, l'onglet "Synthèse" affiche le résultat attendu.

Je vous remercie par avance pour votre aide.
 

Pièces jointes

  • Suivi To do.xlsx
    18.4 KB · Affichages: 5

fanfan38

XLDnaute Barbatruc
Bonjour
Ci joint ma solution par macro
(elle se lance quand tu changes de feuille et que tu es sur la feuille synthese)

A+ François
 

Pièces jointes

  • Suivi To do.xlsm
    25.7 KB · Affichages: 10

cdric78

XLDnaute Junior
Bonjour,

Merci à FANFAN38 pour cette macro.

Je souhaite savoir comment faire pour modifier la macro afin de conserver la mise en forme des cellules copiés (police, mise en forme, lien hypertexte etc...)

Merci par avance pour vos réponses.

VB:
Private Sub Worksheet_Activate()
  Dim i As Integer, j As Long, lig As Long
 ' Set sh = Sheets("Synthèse")
  Range("A2:B1000").ClearContents
  lig = Range("B" & Rows.Count).End(xlUp).Row + 1
  For i = 1 To Sheets.Count
    If Sheets(i).Name <> "Synthèse" Then
      Range("A" & lig) = Sheets(i).Range("A1")
      For j = 2 To Sheets(i).Range("D" & Rows.Count).End(xlUp).Row
        If Sheets(i).Range("D" & j) = 1 Then
          Range("B" & lig) = Sheets(i).Range("C" & j)
          lig = lig + 1
        End If
      Next
      lig = lig + 2
    End If
  Next
End Sub
 

job75

XLDnaute Barbatruc
Bonjour cdric78, François,

Les instruction comme :
VB:
Range(x) = Sheets(i).Range(y)
copient uniquement les valeurs.

Pour copier aussi les formats utilisez :
VB:
Sheets(i).Range(y).Copy Range(x)
A+
 

job75

XLDnaute Barbatruc
Vous n'avez donc pas appliqué correctement mes instructions pour obtenir :
VB:
Private Sub Worksheet_Activate()
  Dim i As Integer, j As Long, lig As Long
 ' Set sh = Sheets("Synthèse")
  Range("A2:B1000").ClearContents
  lig = Range("B" & Rows.Count).End(xlUp).Row + 1
  For i = 1 To Sheets.Count
    If Sheets(i).Name <> "Synthèse" Then
      Sheets(i).Range("A1").Copy Range("A" & lig)
      For j = 2 To Sheets(i).Range("D" & Rows.Count).End(xlUp).Row
        If Sheets(i).Range("D" & j) = 1 Then
          Sheets(i).Range("C" & j).Copy Range("B" & lig)
          lig = lig + 1
        End If
      Next
      lig = lig + 2
    End If
  Next
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…