Extraire partie Tableau selon date début et date fin
Bonjour tout le monde
Je m'adresse à vous, pour m'aider ; je veux extraire une partie d'un tableau(colonnes A:E)de la feuille "Solde"; d'après 2 dates(date début et dates fin)
vers la feuille "Relevé" à partir de la cellule "A2"
J'ai une macro que j'ai trouvée dans un site ,mais elle coince; dans les 2 lignes jaunes si après quelque modification
dans le code; la 1ière ligne passe mais la seconde bloque. vous trouverez ci joint le fichier Excel en question.
Merci à vous tous.
==========================================================================
===========================================================================
La macro liée à un bouton:
Option Explicit
Dim tablo, tabloR(), dteD As Date, dteF As Date, i&, k&
Private Sub CommandButton1_Click()
tablo = Range("A5:E" & Range("A" & Rows.Count).End(xlUp).Row)
dteD = Range("G3") ' date début
dteF = Range("H3") ' date fin
k = 0
For i = 1 To UBound(tablo, 1)
If tablo(i, 2) >= dteD And tablo(i, 2) <= dteF Then
ReDim Preserve tabloR(3, k + 1)
tabloR(0, k) = tablo(i, 1)
tabloR(1, k) = tablo(i, 2) * 1
tabloR(2, k) = tablo(i, 3)
tabloR(3, k) = tablo(i, 4)
tabloR(4, k) = tablo(i, 5) '
k = k + 1
End If
Next i
Sheets("Relevés").Range("A1").CurrentRegion.Offset(1, 0).ClearContents
Sheets("Relevés")("A2").Resize(UBound(tabloR, 2), 3) = Application.Transpose(tabloR)
End Sub
Bonjour,
Voici un essai que j'ai arrangé en base 1 pour que ce soit plus simple sachant que le principal problème se situait dans le redim preserve tabloR(3, k+1).
Option Explicit
option base 1
Dim tablo, tabloR(), dteD As Date, dteF As Date, i&, k&
Private Sub CommandButton1_Click()
with sheets("Solde")
tablo = .Range("A5:E" & .Range("A" & .Rows.Count).End(xlUp).Row)
dteD = .Range("G3") ' date début
dteF = .Range("H3") ' date fin
For i = 1 To UBound(tablo, 1)
If tablo(i, 2) >= dteD And tablo(i, 2) <= dteF Then
k = k + 1
ReDim Preserve tabloR(5, k)
tabloR(1, k) = tablo(i, 1)
tabloR(2, k) = tablo(i, 2) * 1
tabloR(3, k) = tablo(i, 3)
tabloR(4, k) = tablo(i, 4)
tabloR(5, k) = tablo(i, 5)
end if
Next i
end with
with Sheets("Relevés")
.Range("A1").CurrentRegion.Offset(1, 0).ClearContents
.range("A2").Resize(UBound(tabloR, 2), UBound(tabloR, 1)) = Application.Transpose(tabloR)
end with
End SubAu fait, pour poster du code, il y a le logo </> sur le ruban de commentaire
Edit : Bonjour Gmb, j'avais reconnu ton style
Cdlt,
Bonjour
Réponse pour gmb:
Extraction seulement des colonnes A et B .la colonne B de la feuille "Relevé" reçoit la colonne A de la feuille Solde et vice versa + format date qui se convertisse en
mm/jj/aaaa, il résulte 1 désordre de classement .
Réponse pour gmb: Problème de format date mm/jj/aaaa et la feuille Relevé ne se réinitialise pas même après enregistrement les anciennes écritures se conservent.
j'ai voulu insérer les fichiers mais le service est non disponible.
Merci cordialement
Bonjour
Merci "gmb" pour ton aide
le problème est presque résolu :
Les dates de la colonne A de la feuille "Solde" se mettent dans la colonne "B" au lieu de la colonne "A" de la feuille "Relevé". et gardent leur forme jj/mm/aaaa.
La feuille "Relevé" reçoit quelques dates qui ne sont pas comprisent entre date début et date fin et des dates converties en mm/jj/aaaa
Pour moi c'est très bien; si je ne parviens pas à une résolution ,je renomme l'entête de la colonne "B"; feuille "Relevé" en "Date Exécution" et je cache la colonne "B"
Un grand Merci
Tu ne précises pas si les dates que tu veux extraire sont les "Date Exécution" (colonne A de la feuille '"Solde" ou les "Date Valeur" (colonne B)
Dans les versions 1 et 2, j'ai pris les "Date Valeur".
Si tu veux les "Date Exécution", alors voilà la version 3 :
Bye !
Bondoir
Oui tu as raison, je n'ai pas précisé quelles dates de Début et Fin se sont les Dates d'Exécution.
Maintenant les dates conservent leur format d'origine: jj/mm/aaaa; donc le problème est résolu : extraction exacte (Données voulues de la table
avec même format des dates c'est grâce à vous et à 3GB que j'ai reçu de l'aide qui m' éclairé.
J'ai réussi à faire quelques petites modifs dans la macro pour que ça marche. Ci-joint fichier final.
Option Explicit
Dim tablo, tabloR(), dteD As Date, dteF As Date, i&, k&
Private Sub CommandButton1_Click()
tablo = Range("A4:E" & Range("A" & Rows.Count).End(xlUp).Row)
dteD = Range("G3") ' date début
dteF = Range("H3") ' date fin
k = 0
For i = 1 To UBound(tablo, 1)
If tablo(i, 1) >= dteD And tablo(i, 1) <= dteF Then
ReDim Preserve tabloR(5, k + 1)
tabloR(0, k) = tablo(i, 1) * 1
tabloR(1, k) = tablo(i, 2) * 1
tabloR(2, k) = tablo(i, 3)
tabloR(3, k) = tablo(i, 4)
tabloR(4, k) = tablo(i, 5)
k = k + 1
End If
Next i
'Reception des données dans la feuille"Relevé") à partir de la cellule "A3"
Sheets("Relevé").Range("A2").CurrentRegion.Offset(1, 0).ClearContents
Sheets("Relevé").Range("A3").Resize(UBound(tabloR, 2), 5) = Application.Transpose(tabloR)
Sheets("Relevé").Activate
End Sub
Bonsoir
Pardon, erreur de frappe dans mon précédent message; je veux dire "Bonsoir".
