Concaténation plusieurs feuilles
Bonjour à tous, j'espère que vous passez de bonne fêtes.
je bloque sur un sujet que je ne maitrise pas vraiment.
je m'explique:
dans le fichier en annexe, il y a plusieurs feuilles (1,2 et 3 ) où des statuts (colonnes N) sont en "open" "en cours" "closed".
j'aimerai pouvoir regrouper dans la feuille "en cours" tout ceux qui sont en statut "open" et "encours" de toutes les feuilles de mon classeur ( feuille 1,2,3)
je ne sais pas vraiment quelle formule utiliser (concaténer, si conditions ou recherche)
en annexe le classeur.
Merci pour votre aide.
Salut Imagin,
quelque chose ainsi ?
Un double-clic en feuille 'en-cours' ligne 1, démarre la macro
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet
'
Set sWk = Worksheets("en-cours")
Application.ScreenUpdating = False
'
If Not Intersect(Target, Rows(1)) Is Nothing Then
Cancel = True
For x = 1 To Sheets.Count
If IsNumeric(Sheets(x).Name) Then
With Sheets(x)
For y = .Range("B" & Rows.Count).End(xlUp).Row + 1 To 9 Step -1
If .Range("N" & y).Value <> "CLOSED" Then _
sWk.Range("A" & sWk.Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).Value = _
.Range("B" & y).Resize(1, 14).Value: _
.Rows(y).Delete shift:=xlUp
Next
End With
End If
Next
End If
'
Application.ScreenUpdating = True
'
End Sub
Joyeuses Fêtes !
A+
Bonjour à tous
Utilise les tableaux structurés et évite les fusions de cellules qui n'apportent que des problèmes
Une solution PowerQuery, intégré à Excel
Tu peux ajouter d'autres onglets avec des tableaux dont le nom commence par T_ : ils seront pris en compte
Actualiser par Données, Actualiser Tout
Bonsoir @curulis57, merci pour ton aide.
ca correspond plus à ce que je cherche sauf que les lignes s'effacent de la feuille initiale. le but dans la feuille "encours" c'est juste de visualiser ce qui n'est pas encore exécuté mais conserver toutes les lignes dans leur feuilles initiales.
si j'ajoute d'autres onglets, commen dois-je modifier la macro?
désolé mais je gère mal la vba.
merci pour votre aide
Salut Imagin,
Salut 78chris,
en l'état, tu peux ajouter autant de feuilles que souhaité : la macro ne lira que les feuilles autres que 'en-cours'.
Ainsi, tu peux les nommer n'importe comment.
Je t'aurais bien ajouté en bonus des fonctions de tri mais tes cellules fusionnées ("Description") f... le cazin et j'ai la flemme de corriger cela...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet
'
Set sWk = Worksheets("en-cours")
Application.ScreenUpdating = False
'
If Not Intersect(Target, Rows(1)) Is Nothing Then
Cancel = True
If [A3] <> "" Then Range("A3:N" & Range("A" & Rows.Count).End(xlUp).Row).Value = ""
For x = 1 To Sheets.Count
If Sheets(x).Name <> "en-cours" Then
With Sheets(x)
For y = .Range("B" & Rows.Count).End(xlUp).Row + 1 To 9 Step -1
If .Range("N" & y).Value <> "CLOSED" Then _
sWk.Range("A" & sWk.Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).Value = .Range("B" & y).Resize(1, 14).Value
Next
End With
End If
Next
End If
'
Application.ScreenUpdating = True
'
End Sub
A+
Salut Curulis,
un tout grand merci pour ton aide.
au risque de paraître embêtant, la formule ne fonctionne pas vraiment et honnêtement je n'arrive pas à la déchiffrer.
j'ai ajouté une feuille intitulée "feuille1" avec plusieurs "open" et "encours" mais seul une ligne apparait...
j'ai mis le fichier en annexe si jamais tu as un peu de temps.
un grand merci
Salut Imagin,
il est vrai que je tablais mes calculs en fonction d'un tableau complété.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet
'
Set sWk = Worksheets("en-cours")
Application.ScreenUpdating = False
'
If Not Intersect(Target, Rows(1)) Is Nothing Then
Cancel = True
If [A3] <> "" Then Range("A3:N" & Range("M" & Rows.Count).End(xlUp).Row).Value = ""
For x = 1 To Sheets.Count
If Sheets(x).Name <> "en-cours" Then
With Sheets(x)
For y = .Range("N" & Rows.Count).End(xlUp).Row To 9 Step -1
If .Range("N" & y).Value <> "CLOSED" Then _
sWk.Range("A" & sWk.Range("M" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).Value = .Range("B" & y).Resize(1, 14).Value
Next
End With
End If
Next
End If
'
Application.ScreenUpdating = True
'
End Sub
A+
Top merci, cette fois ca fonctionne :-)
un grand merci et passe une bonne fin d'année