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

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - Modifié par Chris 94 le 12/11/2013 à 01:52
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 14 nov. 2013 à 14:37
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
A voir également:

6 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 nov. 2013 à 08:10
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 13/11/2013 à 09:37
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
13 nov. 2013 à 23:16
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2013 à 07:11
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
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
14 nov. 2013 à 14:15
Bonjour Michel,

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

Mélanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2013 à 14:37
pat' quoi :o)

Et à bientôt pour de nouvelles z'aventures !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/11/2013 à 10:06
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
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 nov. 2013 à 10:31
Bonjour, salut Michel,
Rows.Count fait allusion à l'application et non à une feuille, il ne faut donc pas de point. ;-)
A+
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 nov. 2013 à 13:43
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)
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 nov. 2013 à 15:20
Effectivement, j'avais zappé le 6 devant le A
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 15:02
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
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 16:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 16:11
Encore moi!
Arrêter de chercher! j'ai peut-être trouvé..
Je vous reviens

Mélanie
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 16:23
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 nov. 2013 à 17:13
Bien reçu ton classeur, merci

Te propose une solution demain

Bonne soirée
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 17:17
merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 nov. 2013 à 18:11
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
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
12 nov. 2013 à 18:41
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
0