Copier des donnees d'une feuille jusqu'à la derrière ligne

Résolu/Fermé
Philour01 - Modifié par Philour01 le 6/05/2013 à 01:43
 Philour01 - 5 juin 2013 à 14:36
Bonjour,

Je vous soumets mon problème et vous remercie d'avance pour votre (vos) réponses d'experts. Je souhaite copier des données d'un tableau d'une feuille sur une autre feuille jusqu'à la dernière ligne. A noter une particularite avec des cellules qui comprennent des fonctions mais des resultats vides et ces cellules vides de résultats mais avec des fonctions (=si par exemple .... etc) je ne souhaite pas les copier.
Un exemple pour comprendre mon besoin :
- Tableau de 6 colonnes (composées de chiffres ou lettres) avec 15 lignes
- La derniere ligne avec cellule pleine (c'est à dire disposant d'un resultat donné par la fonction de calcul qui est dans la cellule) est la ligne 10 (mais cela change regulierement et peut être ensuite la ligne 8....)
- Attention, j'ai des fonctions dans les autres cellules (lignes 11 à 15) mais qui ne donnent pas de résultats

Mon problème est que mon code copie et colle toutes les lignes qui ont des fonctions y compris si la cellule est vide (en apparence seulement car elle dispose d'une fonction mais l'interprete comme non vide.)


A voir également:

76 réponses

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
10 mai 2013 à 14:17
Re,

es ce que tu te débrouilles ou faut il que je t'adapte le code
0
Merci de m'adapter le code car je n'en ai pas la compétence. Je te ferai un retour sur la reprise du code dans mon fichier.
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 10/05/2013 à 23:43
Re,

alors voila ton fichier

Si tu vas faire un tour dans le Visual Basic (clic droit sur le bouton/Affecter une Macro/Modifier) cela t'amène directement au code VBA et en début de code tu remarqueras ces deux lignes.
Si tu changes les noms de tes onglets il faudra également changer les noms de tes feuilles dans ces deux lignes A L'IDENTIQUE

sinon ton code plantera

Const Feuille_Origine As String = "OGDAB"
Const Feuille_Destination As Variant = "Edit5"

ton fichier

https://www.cjoint.com/c/CEkxOZD6Ck9

Si tu veux, il est possible de compléter le code avec un enregistrement automatique, enfin tu vois
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Bonjour Mike,

Je viens de tester et ton fichier joint fonctionne bien. Encore merci !
Je pensais que tu allais adapter le code pour que le collage des lignes se fasse à partir de la ligne 178 suivant mon dernier mail et fichier joint (mais est ce possible) ? En effet, le tableau figure en 3 ieme page de mon fichier.
Par ailleur, le transfert des lignes copie tout le tableau (dont les cellules "vides") jusqu'à la 54 iem ligne si je mets du texte à recopier à partir de la 56 iem ligne.
Peut-on en VBA copier ( transférer) que les lignes qui ont un résultat donne par la formule de calcul et passer au texte qui figure juste après le tableau ?

En clair, j'ai un tableau qui comprend 54 lignes au total
Certaines en commençant toujours en haut du tableau donnent des résultats liées aux formules de calcul et ce sont uniquement ces lignes avec du resultat que je souhaite transférer dans un onglet de 3 page au niveau de la ligne 178.
L'idéal étant de voir ces transferts décaler vers le bas le texte qui figure en bas du tableau. ( objet de mon précédent fichier)

Cordialement
0

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

Posez votre question
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
11 mai 2013 à 22:16
Salut,

Je ne comprends pas tout tes dires, en fait tu veux coller les lignes non vide de ton tableau principal vers l'autre feuille et les coller au dessous de la ligne 178

C'est bien cela ?

Dans le tableau principal de 54 lignes peut il y avoir des lignes vides entre les lignes à copier ?

Au passage, peut il y avoir des options de collage (texte en gras par exemple ou cellule en couleur etc ...)

Lorsque je te proposais l'enregistrement automatique, en fait on peut insérer dans le code un enregistrement après le collage des donnés ce qui évite l'oublie de la sauvegarde mais qui peut présenter un inconvénient dans le cas ou on souhaites fermer sans enregistrer, voila c'est un choix
0
Bonsoir Mike,

Oui, c'est cela, c'est un peu compliqué et je ne suis pas très clair. Désolé !
Oui, l'objectif est de copier uniquement les cellules non vides (de résultats mais elles disposent en général de formules avec un résultat égale à "" et je ne souhaite pas copier ces formules).
Oui, il faut les copier à partir du début du tableau de l'onglet edit5 ligne 178 et se limiter à 3 lignes copiées par exemple si le tableau ne comprend que 3 lignes ....
Immédiatement en dessous, je dois retrouver les textes en place donc à décaler (tous) vers le bas au fur et à mesure de l'ajout de lignes du tableau.
Non, il ne peut pas y avoir de lignes vides entre les lignes à copier mais je dois pouvoir effacer une ligne copiée ( si possible).
Non, pas de formatage des cellules copiées et collées (gras...)
Oui, je suis intéressé de voir le code relatif à l'enregistrement automatique (quitte à le désactiver ensuite si nécessaire avec Rem)
Merci pour tout.
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
11 mai 2013 à 23:01
Re,

On est loin de la demande initiale et cela se complique, explique moi cette ligne de ta réponse

" Oui, il faut les copier à partir du début du tableau de l'onglet edit5 ligne 178 et se limiter à 3 lignes copiées par exemple si le tableau ne comprend que 3 lignes .... "

onglet Edit5 est l'onglet principal, on copie les lignes non vide par groupe de 3 avec les entête de tes colonnes REF USAGE SURF DEV etc ...

sur l'autre feuille au dessous de la ligne 178 en laissant une ligne vide entre chaque collage de 3 lignes plus la ligne des entête au dessus

c'est cela, j'ai bien compris
0
Erreur de ma part Mike, je voulais dire on colle sur edit5
récapitulons et merci pour ta patience !
On dispose d'un fichier qui comprend plusieurs onglets dont notamment :
- un onglet OGDAB (conservons ce nom) qui comprend un tableau de 54 lignes et 8 colonnes composé de cellules avec des formules de calcul qui donne des résultats (numériques, alphabétiques ou pas de résultat, soit "").
Bien. Je souhaite copier uniquement les lignes pleines de résultats <>"" de OGDAB (des 6 premieres colonnes uniquement ) sur l'onglet edit5 (qui est un onglet qui me sert d'édition papier) qui comprend plusieurs feuilles composées de textes.
Le "coller" des lignes pleines doivent se mettre en place à partir de la ligne 178 (voir mon précédent fichier joint qui montre tout cela).

3 est un exemple et non pas un groupe à coller
Le fichier peut comprendre 5 lignes de cellules pleines de résultats <> de "" alors on copie d'OGDAB ces 5 lignes que l'on colle uniquement sur edit5 à partir de la ligne 178.
Si le tableau donne 20 lignes de cellules pleines de résultats <> de "" on copie les 20 lignes d'OGDAB que l'on colle sur edit5 ........

On ne laisse aucune ligne vide entre chaque collage sur le tableau elle se suivent comme sur le nouveau fichier que je t'envoie dans quelques minutes.

Bonne soirée
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
12 mai 2013 à 08:03
Re,

c'est bon je crois cerner le problème, petite dernière question sur l'onglet OGDAB
les lignes à copier sont elles regroupées (contiguës 6, 7, 8 etc) ou non exemple ligne 6, 10, 18 etc

ensuite à partir de la ligne 178 feuille EDIT5 on colle ces lignes à la suite et on insère autant de nouvelle lignes que de lignes collées

c'est bien cela
0
Bonjour Mike,
Si je comprends bien ta question, les lignes sont contiguës, c'est à dire que les résultats des formules OGDAB lorsqu'ils sont <> de "", se suivent donc ligne 6 - 7 -8 ... On ne peut avoir dans le tableau à copier une ligne 6 puis passer à la ligne 10 ou 18 avec des lignes vides entre. Les lignes précédentes à la ligne de résultat sont obligatoirement pleines. Exemple : Si j'ai 10 lignes à copier, j'ai obligatoirement les 9 lignes précédentes pleines (1.2.3.4.5.6.7.8.9) sans aucune ligne vide entre.
Ensuite on insère entre le texte et le début de la première ligne 178 toutes les autre lignes pleines à la suite.
Bon, il faut prévoir la possibilité d'effacer une ligne du tableau OGDAB qui soit alors automatiquement effacée dans le tableau edit5.
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 12/05/2013 à 22:20
Re,

je préfère travailler sur le fichier que j'ai refait, sans cellules fusionnées qui est toujours source à problème.

j'ai inséré l'enregistrement automatique en fin de procédure, pour l'instant l'action est neutralisée pour te faciliter les essaies.
Pour la rendre opérationnelle il suffit de supprimer l'apostrophe qui se trouve en début de ligne

'ActiveWorkbook.Save

le nouveau code compte les lignes à copier, insère le nombre nécessaire de lignes après la dernière ligne renseignée, copie les lignes dans les lignes insérées à la suite, lorsque tu auras libéré l'enregistrement, l'enregistrement sera automatique.
pour te permettre de voir l'insertion de ligne j'ai colorisé en jaune la cellule B179, les données s'enregistreront entre la cellule B178 et cette cellule jaune

https://www.cjoint.com/c/CEmwtzTIhaD
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Top génial, c'est exactement ce que je recherchais.
Ton fichier fonctionne parfaitement et correspond à mon attente.
Tu es performant dans ton domaine et altruiste. Bravo !!

Merci pour tout

Je regarde le transfert sur mon fichier de l'ensemble de ton code et te tiens au courant sur son fonctionnement. Effectivement j'ai eu quelques difficultés sur le code précédent copié avec un transfert des feuilles d'origine de ton fichier et j'avais un message d'erreur !?

J'aurai ensuite peut être besoin d'une petite évolution sur ce fichier (cumul de 2, voir 3 tableaux comme celui la sur un onglet récapitulatif) que je te soumettrai des que mon application sera opérationnelle avec cet excellent code.

Bonne soirée
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
14 mai 2013 à 12:57
Re,

Pas tout compris, tu veux coller le contenu de plusieurs feuilles sur la feuille EDIT5

c'est cela

Dans la mesure ou tu travaille sur le fichier, l'identification du fichier n'est pas nécessaire, tu cibles directement la plage. Les formule prennent le nom du fichier si tes cellule proviennent d'un fichier tiers
0
http://cjoint.com/?CEqoVPDoRVb
Bonjour Mike,

Merci de ton aide par avance, il ne manque pas grand chose pour que le code fonctionne mais j'ai une anomalie dès que j'intègre un onglet avec une référence à cet onglet.
Cordialement
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
16 mai 2013 à 15:38
Re,

l'erreur vient de cette ligne qui compte les lignes à copier, la fonction compte le cellule format texte, si colonne B feuille OGDAB les références sont au format numérique il conviendra de changer le CountIf en Count pour compter les valeurs numériques et en CountA pour compter les cellules non vide mais attention s'il y a des formules on revient à la case départ

Nbre_lig = WorksheetFunction.CountIf(Range(Range("B6"), Range("B" & Der_lig_B + 1)), ">""")


0
Merci beaucoup pour ta réponse Mike, je planche dessus pour trouver une solution
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
16 mai 2013 à 21:14
Re,

La solution je te l'ai donnée, tout dépend du formatage de ta colonne B, ou c'est du texte ou c'est numérique avec ou sans formule
0
Super, avec CountA cela fonctionne mais avec une particularité :
Si j'ai une seule ligne à copier, il me colle 2 fois la ligne a la suite et à partir de 2 lignes a copier c'est ok pas de doublon !
Peut-0n corriger cela sur la ligne unique ?
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
16 mai 2013 à 21:53
Re,

Normal, il faut adapter le Count
a la fin de cette ligne supprime , ">"""
Nbre_lig = WorksheetFunction.CountIf(Range(Range("B6"), Range("B" & Der_lig_B + 1)) , ">""" ) ' compte ligne à copier

pour avoir cette ligne ou remplace la par celle ci

Nbre_lig = WorksheetFunction.CountA(Range(Range("B6"), Range("B" & Der_lig_B + 1))) ' compte ligne à copier
0
Super génial
Tout fonctionne parfaitement !!
Encore merci
0