Collage des valeurs issu de formule dernière ligne non trouvées

Résolu
le nouveau -  
 le nouveau -
Bonjour,

J'ai crée une VBA pour recopie un tableau composé uniquement de formule dans un autre tableau d'une autre feuille (mm classeur).
Le probleme c'est lorsque les formule fond référence a rien (si(B2<>"";B2;"") j'ai donc bien aucune valeur de collé mais quand je revient coller mon tableau je ne suis pas sur la dernière ligne. (j'ai fait un test en mettant des valeurs manuel la derniere ligne est toujours trouvé)

d'avance merci pour votre aide


A voir également:

8 réponses

Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
Bonjour,

Je n'ai vraiment rien compris pour ma part...

"Je reviens coller mon tableau" : C'est à dire?

"Je ne suis pas sur la dernière ligne" : C'est à dire?

Cordialement.
0
le nouveau
 
Quand je recolle mon tableau avec la VBA ça me trouve pas la dernière ligne CA me le colle après le collage précédant.
exemple:
ma vba colle toujours le tableau de B1 à C10 feuille 1(composé uniquement de formule)
il se peut que il y est un coup les 3 premières lignes complétées et un prochain coup les 6 première.
donc au 1er collage j'ai bien uniquement les valeurs de B1 à C3 sur la feuille 2 et au deuxième collage au lieu de me le coller en B4 il me colle le tableau en B11 alors que de B4 à C10 c'est vide.

Je ne sais pas si c'est plus claire comme ça?

D'avance merci pour votre aide
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
Bonjour,

Je vais faire clair, si votre tableau est amené à bouger, il faut que la taille de votre tableau, à savoir la dernière ligne, soit définit de manière variable.

Définissez dans un premier temps la dernière du tableau source puis ensuite du tableau de destination comme ceci :

Sub TEST()

Dim Derniere_Ligne As Long, Derniere_Ligne2 As Long

Derniere_Ligne = Fichier1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'En supposant que la colonne A soit la plus remplie, la colonne de référence pour compter la dernière ligne

Derniere_Ligne2 = Fichier2.Cells(Application.Rows.Count, 1).End(xlUp).Row 'En supposant que la colonne A soit la plus remplie, la colonne de référence pour compter la dernière ligne

...


Ensuite, pour le collage, il suffit de lui dire de coller les ligne de 1 à Derniere_Ligne. Et pour la destination, vous mettez que le collage commence à Derniere_Ligne2 + 1.

Cordialement.
0
le nouveau > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
 
Je suis un peu perdu j'ai un fichier test serait-il possible de vous l'envoyer?
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > le nouveau
 
bonjour

au passage
quand une formule renvoie "" ca ne veut pas dire qu'elle est vide. (voir Raymond Devos)
donc la colonne où tu as la formule, mettons colonne C

Sub lenouveau()
ligvid = Columns("c").Find("", Range("C1"), xlValues).Row
end sub
0
le nouveau > michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
je n'arrive pas à le faire marcher ce code
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
Pour envoyer le fichier, allez le https://www.cjoint.com/

Cordialement.
0
le nouveau
 
http://www.cjoint.com/c/EIsvlO0MJLE

voila le fichier merci pour tt
0

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

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour


la macro testée avec succès

Option Explicit
'-------
Sub CopieTableauTEST()
Dim Tampon, Derlig As Byte, Ligvid As Byte
With Worksheets("FEUIL1")
Derlig = .Columns("B").Find(what:="*", searchdirection:=xlPrevious).Row
Tampon = .Range("B7:D" & Derlig)
End With

With Sheets("FEUIL2")
Ligvid = .Columns("B").Find("", .Range("B" & .Rows.Count), xlValues).Row
With .Range("B" & Ligvid).Resize(UBound(Tampon), 3)
.Value = Tampon
.Borders.Weight = xlThin
End With
.Activate
End With
End Sub


suggestion: il serait peut-^tre intéressant que tu mettes en ligne 1 feuil 2 les ent^tes (qté, def, n°)

si oui
remplacer ligvid=....
par
Ligvid = .Columns("B").Find("", .Range("B1"), xlValues).Row


Michel
0
le nouveau
 
Super ça marche ! :) :) :) (serait-il possible de me la décrypter pour la comprendre? SVP

Juste un petit truque comment je peux faire pour pouvoir avoir des lignes vides en haut du tableau? (si c'est possible)

Merci beaucoup en tout cas c'est déjà super !!!!
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Plusieurs choses qu'oublient les débutants (ce n'et pas péjoratif)

1/Option explicit
oblige à déclarer les types des variables : integer, byte, string, variant
une variable déclarée sans type est inscrite en variant (Tampon)
le type variant est très lourd en mémoire
l'erreur classique:
dim toto, tata, Titi as byte
toto et tata sont considérés comme variant
donc
dim Toto as byte Tata as byte etc

ainsi lors d'essai, une faute de frappe, chose que l'on sait bien faire, est signalé
et la macro s'arrête: avec l'expérience, cela s'avère très précieux et économise de la RAM


2/ eviter au maximum les selection.copy paste , select, activate chronophages et encombrants en mémoire

With Worksheets("FEUIL1")
Derlig = .Columns("B").Find(what:="*", searchdirection:=xlPrevious).Row
Tampon = .Range("B7:D" & Derlig)
End With


3/ with... end with:

on travaille par bloc: pas besoin d'aller dans la feuille avec activate ou select
et on est sûr que les actions se passent bien dans la feuille voulue; nécessite de mettre un point devant les objets (range, columns...)

on peut l'employer pour une plage de cellule

Derlig,
donne la dernière ligne en remontant (xlprevious)ou il y a quelque chose( le "*" est différent de "") 'est la formule la + sure parmi de nombreuses formules mais assez compliquée

tampon crée un une variable tableau (tableau virtuel) en variant car les types des données peuvent ^tre différents
les données inscrites dans tampon sont les valeurs sans les formats

With .Range("B" & Ligvid).Resize(UBound(Tampon), 3)
.Value = Tampon
.Borders.Weight = xlThin
End With


nouveau bloc avec cette fois une plage de cellules
Range("B" & ligvid) cellule en haut et à gauche de la restitution
resize: agrandir cette cellule au nombre de ligne (ubound: nbre de ligne de tampon) et colonnes de tampon

enfin comme on veut voir le résultat, on est obligé d'appeler la feuille voulue par un activate (préférable à select)

------
edit:

si tu veux commencer la restitution après 4 lignes vides ( lignes 1 à 4)soit ligne 5
Ligvid = .Columns("B").Find("", .Range("B" & .Rows.Count), xlValues).Row+4
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
MERCI

de rien...
0
le nouveau
 
je reviens de mon voyage a l'étrange dsl de ne pas avoir était aussi rapide que vous en tout cas merci beaucoup !
0