Non détection de la première ligne vide d'un tableau
Bonjour le forum,
Dans un fichier pour gérer la compta d'une association, j'ai les onglets Banque, Caisse et Journal. Avec un UF_Ecritures chaque fois que je saisie une écriture dans Banque ou Caisse, certains champs de cette écriture sont copiés dans Journal par le biais du module 2.
Ca fonctionne bien sauf la première copie sur Journal ne se fait pas sur la première ligne vide du tableau, en ligne11. Pourtant à chaque début d'exercice comptable le tableau doit être vide.
'Dans l'onglet Journal saisir les opérations provenant des onglets Banque et Caisse
Sub Copie_Banque_Journal()
Dim WsSource As Worksheet, WsCible As Worksheet
Dim LigSource As Integer, LigCible As Integer
Set WsSource = ThisWorkbook.Worksheets("Banque")
Set WsCible = ThisWorkbook.Worksheets("Journal")
LigSource = WsSource.Range("B1000").End(xlUp).Row
LigCible = WsCible.Range("B1000").End(xlUp).Row + 1
With WsCible
.Range("C" & LigCible) = WsSource.Range("B" & LigSource)
.Range("E" & LigCible) = WsSource.Range("F" & LigSource)
.Range("F" & LigCible) = WsSource.Range("G" & LigSource)
.Range("G" & LigCible) = WsSource.Range("H" & LigSource)
.Range("H" & LigCible) = WsSource.Range("I" & LigSource)
End With
End Sub
Sub Copie_Caisse_Journal()
Dim WsSource As Worksheet, WsCible As Worksheet
Dim LigSource As Integer, LigCible As Integer
Set WsSource = ThisWorkbook.Worksheets("Caisse")
Set WsCible = ThisWorkbook.Worksheets("Journal")
LigSource = WsSource.Range("B1000").End(xlUp).Row
LigCible = WsCible.Range("B1000").End(xlUp).Row + 1
With WsCible
.Range("C" & LigCible) = WsSource.Range("B" & LigSource)
.Range("E" & LigCible) = WsSource.Range("F" & LigSource)
.Range("F" & LigCible) = WsSource.Range("G" & LigSource)
.Range("I" & LigCible) = WsSource.Range("H" & LigSource)
.Range("J" & LigCible) = WsSource.Range("I" & LigSource)
End With
End SubQuelqu'un pourrait-il m'aider à résoudre le problème ?
Merci d'avance pour votre aide.
Cordialement.
bonjour,
votre tableau n'est pas vide, il contient des lignes vides et avec ce "End(xlup)" vous vous positionez sur la dernière "listrow". Comment vous êtes sûr que ce tableau a été vidé ? Bizarre, vos formules de la ligne 6 commencent à la ligne 16, il y a une raison ? Ou vous l'utilisez comme un tableau structuré ou vous le faites sans ...
Bonjour,
Merci de répondre.
Le tableau n'est pas vide, c'était pour montrer l'exemple.
Je vide le tableau en sélectionnant les lignes (sauf en-tête L10) et bouton droit de la souris "supprimer ligne de tableau". Toutes les lignes sont supprimées sauf la première (L11) qui reste vide. Et quand j'exécute le macro de copie, elle se fait sur L12 au format plage de donnée !!!
Les formules de la ligne 6 ne font que la somme de chaque colonne du tableau. La ligne 16 étant la seule remplie, il est normal que ce résultat soit reporté en ligne 6.
Je veux l'utiliser en TS, car si je l'utilise en plage de donnée, la première macro renseigne bien la première ligne (L11), mais les macros suivantes aussi.
Donc, ma question reste posée...
Cordialement
Drapela
Bonjour,
Pour le principe.
Le tableau T_Journal est vérolé (pas possibilité de sélection de lignes !...)
Cdlt.
Public Sub Copie_Banque_Journal()
Dim loSource As ListObject, loCible As ListObject
Dim lr As ListRow
Dim r As Range
Set loSource = Worksheets("Banque").Range("T_Banque").ListObject
Set loCible = Worksheets("Journal").Range("T_Journal").ListObject
Set lr = loSource.ListRows(loSource.ListRows.Count)
With loCible
If .InsertRowRange Is Nothing Then
Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
Else
Set r = .InsertRowRange.Cells(1)
End If
End With
r.Offset(, 1).Value = lr.Range.Cells(1, 1).Value 'Date
r.Offset(, 3).Value = lr.Range.Cells(1, 4).Value 'Rubrique
r.Offset(, 4).Value = lr.Range.Cells(1, 5).Value 'Commentaire
r.Offset(, 5).Value = lr.Range.Cells(1, 6).Value 'Débit
r.Offset(, 6).Value = lr.Range.Cells(1, 7).Value 'Crédit
End SubBonjour Jean-Eric,
Merci pour ta proposition.
Cà fonctionne parfaitement. Il y avait juste un décalage de numéro de colonne dans les r.offset que j'ai corrigé (mais c'était peut-être un test
J'adapte ton code pour l'onglet caisse et je valide le post comme résolu.
Encore merci
Cordialement
Drapela.