Combiner plusieurs plages de données pour faire une liste

William77

XLDnaute Nouveau
Bonjour à tous,

Est-il possible de combiner plusieurs plages de données (de préférence sans VBA si possible), tel que le fichier joint?

Je précise que j'ai fait des recherches, mais je ne dois pas utiliser les bons mots clés.....

S'il n'y a pas le choix que d'utiliser le VBA je suis preneur ;).

Si oui, serait-il possible d'avoir une aide?

Cordialement.
 

Pièces jointes

  • Test combiner.xlsx
    14 KB · Affichages: 31

soan

XLDnaute Barbatruc
Inactif
Bonjour litelsousa,

Je viens de lire ton post #15 au sujet du tri ;
nouveau code VBA (en plus du fichier joint) :
Code:
Sub Essai()
  Dim col As Byte, lg1&, lg2&, lg3&, chn$, k As Byte
  lg3 = 16: Application.ScreenUpdating = 0
  With Worksheets("Décompte_heures").ListObjects("Total")
    .DataBodyRange.ClearContents
    For col = 5 To 8
      For lg1 = 3 To 14
        chn = Cells(lg1, col)
        If chn <> "" Then
          k = 0
          For lg2 = 17 To lg3
            If Cells(lg2, 2) = chn Then k = 1: Exit For
          Next lg2
          If k = 0 Then
            lg3 = lg3 + 1: Cells(lg3, 2) = chn
          End If
        End If
      Next lg1
    Next col
    With .Sort
      .SortFields.Clear: .SortFields.Add Range("B16:B" & lg3), 0, 1
      .Header = 1: .MatchCase = 0: .Apply
    End With
  End With
End Sub
La ligne du Dim n'a pas changé ; pour la ligne en dessous,
j'ai seulement enlevé le commentaire ; rien n'a changé
pour la boucle For col ... Next col ; regarde tout le reste,
au-dessus de For col, et sous Next col.

Si tu n'as qu'une seule feuille dans ton vrai classeur,
tu peux remplacer Worksheets("Décompte_heures")
par ActiveSheet.

Si besoin, tu peux demander
une autre adaptation. ;)


soan
 

Pièces jointes

  • décompte heures.xls
    120.5 KB · Affichages: 9

litelsousa

XLDnaute Occasionnel
Hello,
Merci c'est perfect.
Mais comme j'ai pas très bien étudié la façon dont je remplirais cette liste, je l'ai modifiée.

Tout joue sauf
VB:
    With .Sort
      .SortFields.Clear: .SortFields.Add Range("3:12" & lg3), 0, 1
      .Header = 1: .MatchCase = 0: .Apply
    End With
Le "
: .Apply ne passe pas.
Je n'arrive pas à comprendre pourquoi?
 

Pièces jointes

  • feuille_heure.xlsm
    31.5 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
Re,

1) ce n'est pas Range("3:12" & lg3), c'est : Range("L2:L" & lg3)
c'est pour ça que le .Apply ne passe pas !

2) si tu mets seulement la modif ci-dessus, ça ne marchera pas,
car tu as fait d'autres erreurs dans l'adaptation du code VBA !
tu les verras en comparant ton ancien code et le nouveau.

------------------------------------------------------------------------------------

3) j'ai ajouté une variable dlg& : elle est initialisée ainsi :
dlg = Cells(Rows.Count, 2).End(3).Row
c'est la dernière ligne utilisée, selon la colonne B "Date"

donc au lieu de For lg1 = 3 To 52, c'est : For lg1 = 3 To dlg
tu peux ajouter d'autres lignes dans ton tableau, la macro
va s'y adapter automatiquement
. :)

si tu préfères un dlg selon une autre colonne, par exemple
selon la colonne D "Motif", alors dans le code VBA, remplace 2 par 4 :
dlg = Cells(Rows.Count, 4).End(3).Row
mais surtout, ne modifie pas le 3 : c'est la constante numérique pour
xlUp : vers le haut.

attention : ne choisis pas une colonne qui a des trous ! je veux dire :
toute ligne utilisée doit avoir une date... ou un motif (selon choix).


------------------------------------------------------------------------------------

4) tu trouveras ci-dessous le fichier corrigé ; fais Ctrl e ➯ travail effectué

5) lis bien tous les commentaires du code VBA (texte en vert)

À te lire pour avoir ton avis... une autre adaptation ? ;)

soan
 

Pièces jointes

  • feuille_heure.xlsm
    28.9 KB · Affichages: 8
Dernière édition:

Discussions similaires

Réponses
6
Affichages
305

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260