Bug dans macro Extraction d'un tableau
Bonjour
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, 2) >= dteD And tablo(i, 2) <= dteF Then
ReDim Preserve tabloR(5, 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é").Range("A1").CurrentRegion.Offset(1, 0).ClearContents
Sheets("Relevé").Range("A2").Resize(UBound(tabloR, 2), 5) = Application.Transpose(tabloR)
Sheets("Relevé").Activate
End Sub
Du code à compter d’en bas , ligne ci-dessous :
Sheets("Relevé").Range("A2").Resize(UBound(tabloR, 2), 5) = Application.Transpose(tabloR)
2) De plus quand le bug disparaît l’extaction vers la feuille « Relevé » se fait même si les
Dates dans les cellules « G3 » et « H3 » ne figurent pas dans la colonne « A » de la feuille « Solde ».
Merci les amis
Bonjour Abdu,
Comme je le suggérais sur ton précédent sujet, il vaut mieux, lorsqu'on est pas familiarisé avec les tableaux dynamiques, passer en base 1. Ca facilite les choses, évite les confusions et ne coûte pas grand chose (un simple ligne en début de module).
Option Explicit
Option Base 1
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
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
with Sheets("Relevé").Range("A1").CurrentRegion.Offset(1, 0)
.ClearContents
.Resize(UBound(tabloR, 2), 5) = Application.Transpose(tabloR)
end with
Sheets("Relevé").Activate
End SubQue se passe-t-il avec les dates ? Il ne faut pas prendre une ligne lorsqu'une des 2 dates n'est pas renseignée ?
Cdlt,
Bonjour
J’ai ajouté « option Base 1 » dans l’entête du code et ça bug .
- Au début j’ai un fichier dont la macro apparemment marche ; si les dates mises dans les cellules « G3 » et « H3 » se trouvent dans la colonne « A » de la feuille « Solde » ; mais :
- Si des dates (ne figurant pas dans la colonne « A »,comme dans le fichier joint) mises exprès pour test dans les cellules « G3 » et « H3 » quelques fois ça bug et quelques fois recopie tout le tableau
- Que se passe-t-il avec les dates ?
- Si dans les cellules de la colonne « B » de « Solde ; Dates Exécution sont vides
- Dans la feuille « Relevé » on trouve dans la colonne « B » des dates « 00/01/1900 »
- J’ai remédié à ce problème par cette macro dans le module de la feuille « Relevé » :
- ================================================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Effacer les cellule de la colonne"B" de la feuillr "Relevé"
DernligneColB = Range("B" & Rows.Count).End(xlUp).Row
Dim i As Integer
For i = 4 To DernligneColB
'Or cel = "0/1/1960" Or cel = "0"
If Cells(i, 2) = 0 / 1 / 1960 Then
'Cells(i, 2) = ""
Cells(i, 2).ClearContents
End If
Next
end sub
Merci à vous et bonne journée
Bonjour,.
Voici votre fichier en retour avec un tableau structuré sur la feuille Relevé. Je vous conseille vivement de faire de même avec la feuille Solde et surtout de ne pas fusionner de cellules ni de propager un format jusqu'en bas de la feuille. Mettez le tout sous tableau structuré, vous verrez, ce sera beau
J'ai donc laissé l'option base 1. J'ai placé le code dans un module normal et celui-ci est appelé par le bouton de la feuille Solde.
Edit : Et ça marchait bien donc j'ai pas prêté attention aux dates mais vous pouvez, au sein du code, mettre quelque chose comme ça :
dteD = iif(.Range("G3")="", 1, .range("G3")) ' date début
dteF = iif(.Range("H3")="", Date + 1000, .range("H3")) ' date finCdlt,
Bonjour
Merci pour l'aide et les conseils
Bonne journée.