Copier des données dans la dernière ligne vide

[Résolu/Fermé]
Signaler
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
-
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
-
Bonjour,

Je sais que ce sujet à été de nombreuses fois abordé. Mais je ne trouve pas ma solution.
J'ai tout essayé mais au mieux (quand ça fonctionne) j'ai un espace d'une ligne entre mes données, ce qui me cause un problème car j'ai un calcul qui fait référence à la ligne au-dessus..

Voici mon but :
Dans mon fichier j'ai une feuille nommée grand livre à date, dans la colonne H de cette feuille il y a les numéro de comptes
J'ai des feuilles qui portent le nom de ces mêmes numéros de compte
Je demande : une fois que tu as trouvé le numéro du compte dont une feuille en porte le nom, va porter les colonne 1 à 6 dans la bonne feuille dans la première ligne vide. (à partir de la ligne 6)

Voici le code en question :

Sub repartir_grandlivre()

Dim compte As String, cpt_cl As Long, Nbre As Integer, Cptr As Integer
Dim Derlig As Integer
Dim Tablo()
Dim Lign As Long




Application.ScreenUpdating = False

With Sheets("Grand livre à date")
'mémorise la feuille "grandlivre" en mémoire RAM
Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne utilisée col A
T_grandlivre = .Range("A1:I" & Derlig).Value 'creation d'une variable -tableau

'--------------- Répartition dans les feuilles comptes
For cpt_cl = 1 To 16 ' LE NOMBRE DE compteS
compte = Choose(cpt_cl, "42123", "42110", "33510", "33505", "33520", "33531", "42104", "33540", "33541", "33511", "33542", "42112", "42113", "42114", "42116", "42118")
Nbre = Application.CountIf(.Columns("H"), compte)
'-----collecte des données dans la ligne en cours et mémorisation dans la variable Tablo
If Nbre > 0 Then ' si je trouve le # de compte ça va être >0
ReDim Tablo(Nbre, 6) ' nbre = combien il trouve de ligne avec le compte, 6= COL
lig = 1
For Cptr = 1 To Nbre
lig = .Columns("h").Find(compte, .Cells(lig, "H"), xlValues).Row
For Col = 1 To 6
Tablo(Cptr, Col - 1) = T_grandlivre(lig, Col)
Next
Next


'-----restitution et encadrement dans la feuille comptes en cours
With Sheets(compte)
Lign = .Range("a6" & Rows.Count).End(xlUp).Row + 1
With .Cells(Lign, "A").Resize(Nbre, 6)
.Value = Tablo
.Borders.Weight = xlThin
End With
End With
End If
Next

Application.ScreenUpdating = True ' Provisoire pour Essai rapidité

End With
End Sub

Soyez indulgent je ne suis pas très bonne et j'avais eu de l'aide pour ce code (les remarque viennet parfois de moi, qui me suis pris des notes pour essayer de comprendre)
je vous remercie à l'avance du temps que vous consacrerai à mon problème
Mélanie

6 réponses

Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
Bonjour,

Ci joint proposition (dézipper et non ouvrir directement)
https://www.cjoint.com/?3Knif41LUgd

j'avais fermé la bécane avant de lire ton dernier message
mais l'inscription du solde dans la colonne E peut ^tre traité par la macro "repartir"

je regarde et te propose la modif ( tout à l'heure) :o)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel

Désolé de mon délai à te répondre.. J'ai été débordée toute la journée et je voulais regarder comme il faut avant de te revenir..
Premièrement : merci beaucoup du temps que tu as consacré à mon problème.

Deuxièmement : il y a un bug. J'ai regardé attentivement ton code mais je le comprends pas tellement.. (J'ai beaucoup de la difficulté avec les regroupements et les tableaux..)

Des données vont bel et bien s'inscire dans les feuilles mais pas nécessairement des données qui devraient y aller..
Ex : dans le compte 42123 :

ça me transfert les 3 lignes suivantes :
P008711 2013-10-01 0,14
P008711 2013-10-01 27,25
P008742 2013-10-24 513,61

le premier à comme # de compte : 33505 et la 2ème ligne 42118 et la 3ème 21340
alors aucune des lignes n'est bonne pour ce compte..

Alors je n'ai plus d'interligne lors de la copie mais ça ne copie pas les bonnes infos..

Je vais essayer de faire un mixte de ton code avec celui que j'avais déjà voir si je peux règler un ou l'autre des problème

merci encore
Mélanie
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
Bonjour,
Oups! Excuses moi
effectivement , il y a un décalage de 2 lignes
en effet je commençais le tableau T_grandlivre à la ligne 3 au lieu de la ligne1 !!!! :-(

donc il faut écrire
T_grandlivre = .Range("A1:H" & Derlig).Value 'creation d'une variable -tableau

je viens d'essayer et en feuille 42123 j'ai ceci
https://www.cjoint.com/?3KohjgGdAwv
je n'ai pas testé la suite mais normalement ....'je brule un cierge !)

Bonne journée
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel,

Tout fonctionne à merveille! Je te remercie énormément pour ton aide. C'est exactement ce que j'essayais de faire

Mélanie
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
pat' quoi :o)

Et à bientôt pour de nouvelles z'aventures !
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
Bonjour,

Sur les forums, il est bien vu de citer ses sources....

il serait plus facile de d'essayer de t'aider si tu joignais ton fichier -ou un extrait-

pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse


dans cette attente :o)

Edit:

Déjà, il manque un point devant Rows.count
With Sheets(compte)

Lign = .Range("a6" & Rows.Count).End(xlUp).Row + 1

Michel
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Bonjour, salut Michel,
Rows.Count fait allusion à l'application et non à une feuille, il ne faut donc pas de point. ;-)
A+
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
bonjour Lermite
OK, Merci; au fait,ne faudrait il pas écrire plutôt
Lign = .Range("A" & Rows.Count).End(xlUp).Row + 1
au lieu de
Lign = .Range("a6" & Rows.Count).End(xlUp).Row + 1

comme j'utilise un autre thread
with sheets(compte)
ligvide =Columns("A").find("*",,,,,xlprevious).row+1
...etc
je suis u_n peu perdu avec cette symtaxe rows.count)
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
Effectivement, j'avais zappé le 6 devant le A
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel et Bonjour Lermite!

merci à vous deux pour votre aide. Lermite, j'ai essayé d'enlever le point.. j'ai cherché sur le net rows.count des indications.. j'ai pas trouvé..

Et michel, j'ai essayé tes deux solutions plus haut et ça n'a pas fonctionné non plus..
Voici mon fichier
https://www.cjoint.com/?3KmoUMhVSGI
dans la page grand livre à date quand on appui sur le bouton, la distribution devrait se faire dans les feuilles mais il ne se passe rien..

encore merci
Mélanie
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour à vous deux,

J'ai essayé :
1- ligvide = Columns("A").Find("*", , , , , xlPrevious).Row + 1
2- Lign = .Range("a" & .Rows.Count).End(xlUp).Row + 1
3- Lign = .Range("A" & Rows.Count).End(xlUp).Row + 1

Rien ne se passe..
à un certain moment ça fonctionnait mais ça sautait une ligne entre chque transfert..maintenant plus rien ne fonctionne..

Mélanie
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Encore moi!
Arrêter de chercher! j'ai peut-être trouvé..
Je vous reviens

Mélanie
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour


J'ai trouvé pourquoi ça ne s'inscivait plus.. en fait ça s'inscivait toujours dans mes feuilles mais j'avais fait tellement de test que j'avais des données dans les lignes 1000 de mes feuilles et je ne les voyais pas..

Alors avec ce code
 Lign = .Range("a" & .Rows.Count).End(xlUp).Row + 1

ça fonctionne mais ça espace d'une ligne entre chaque distribution (seulement à chaque fois qu'on appui sur le bouton)

et j'ai essayé avec le code proposé par Michel
ligvide = Columns("A").Find("*", , , , , xlPrevious).Row + 1

mais là j'ai une erreur : 400

j'ai donc encore mon problème.. je continue de chercher
merci
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
Bien reçu ton classeur, merci

Te propose une solution demain

Bonne soirée
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
merci
Messages postés
16523
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 septembre 2021
3 229
heu !...

Tu dis transférer les colnne 1 à 6 du grand livre versles feuilles de comptes mais cela ne semble pas trop correspondre par E vide dan grand livre marqué "solde" dans les comptes...

Tu dis
Messages postés
200
Date d'inscription
mercredi 24 août 2011
Statut
Membre
Dernière intervention
15 mars 2018
4
Bonjour Michel

E est vide dans les deux feuilles. Dans la deuille des comptes ensuite j'ai une formule pour le calcul du solde : ex pour le compte 33505
      

Sub calcul33505()
Dim LastLig As Long
Application.ScreenUpdating = False
With Worksheets("33505")

'Ligne de la dernière cellule remplie de colonne A
LastLig = .Cells(.Rows.Count, "E").End(xlEnd).Row

'On écrit la formule dans A2&"/"&B2 dans C2:Cxx puis on fige les valeurs
With .Range("E7:E" & LastLig)
.Formula = "=IF(RC[-4]>0,IF(RC[-2]>0,R[-1]C+RC[-2],R[-1]C-RC[-1]),"""")"
.Value = .Value
End With
End With
End Sub



Alors la colonne E se rempli

J'espère que cela répond à ta question
encore merci
Mélanie