Copier des données dans la dernière ligne vide
Résolu
lanetmel
Messages postés
200
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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 :
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
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:
- Atteindre la derniere ligne vide word
- Supprimer dernière page word - Guide
- Word 2013 - Télécharger - Traitement de texte
- Tableau word - Guide
- Espace insécable word - Guide
- Word et excel gratuit - Guide
6 réponses
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)
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)
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
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)Michel
Lign = .Range("a6" & Rows.Count).End(xlUp).Row + 1
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)
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)
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
https://www.cjoint.com/?3KnjK1J7suP
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
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
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
Tout fonctionne à merveille! Je te remercie énormément pour ton aide. C'est exactement ce que j'essayais de faire
Mélanie
Et à bientôt pour de nouvelles z'aventures !