Mon code VBA garde en memoire un Chiffre

bonjour, et merci pour ce magnifique travail.

j'ai un probleme avec ma macro

je dois copier tous les donnees d’une feuille1 du classeur « donnees » vers la feuille « importees » d’un classeur « final ».

voici le code:

Sub import1()

‘ import1 Macro

Windows("donnees.xlsm").Activate

Sheets("incidents").Select

Rows("2:2″).Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

Windows("final.xlsm").Activate

Sheets("importees").Select

Derniereligne = ActiveSheet.UsedRange.Rows.Count + 1

Range("A" & Derniereligne).Select

ActiveSheet.Paste

End Sub

la première fois que j’ai exécuté ce code c’était bien,le problème c’est que, depuis que j’ai effacé les données de la feuille « importees » du classeur « final » et que j’exécute a nouveau le code, il me colle les données dans la 1ere cellule vide après ma première exécution de cette macro.

ex:

1ere exécution de la macro, ca m’a coller 200 lignes a partir de la cellule « A2″ ( la 1ere ligne contient l’entête).

j’efface ces donnees (sans l’entete), et j’execute encore une fois la macro, elle me les colle a partir de la cellule 202.

j’efface a nouveau et j’execute la macro, elle me colle les donnees dans la cellule (202+200). c’est comme ci elle garde en memoire le chiffre 200 qui sont les 200 lignes de donnees de la 1ere execution.

merci pour votre aide.

Bonjour et bienvenue sur le forum

Essaie en modifiant l'instruction qui définit la dernière ligne :

    Sheets("importees").Select
   Derniereligne = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Rows.Count + 1
    Range("A" & Derniereligne).Select

bonjour,

merci pour cette reponse si vite. le code ne fait qu'ecraser les donnees a partir de la 2eme ligne. a chaque fois que je l'execute.

ce que je veux, c'est garder les anciennes donnees, et coller ensuite a chaque fois a partir de la prochaine ligne vide.

merci pour votre aide.

Tu écris :

le code ne fait qu'ecraser les donnees a partir de la 2eme ligne

Pas du tout.

Le code écrit les nouvelles données à partir de la première cellule vide de la colonne A en partant du bas de la feuille.

Mais s'il y a des cellules vides jusqu'à la cellule A1 (titre), alors, oui, il écrase ce qu'il y a sur les autres colonnes.

Tu devrais joindre un exemplaire de tes 2 fichiers ….

Bye !

bonjour, et merci encore une fois.

je ne sais pas si je me suis bien exprimee.

le classeur finale va devoir s'alimenter a chaque fois avec de nouvelles donnees, donc la marco doit rajouter a chaque fois de nouvelles donnees et les coller juste apres les anciennes ( la 1ere cellule vide apres les anciennes donnees).

ci-joint mes deux fichiers.

19donnees.xlsm (15.94 Ko)

merci d'avance.


bonjour,

j'arrive pas a inserer les deux en meme temps.

ci-dessous le 2eme fichier


j'arrive pas a inserer le 2eme fichier.

en tout cas le 2eme fichier contient la feuille " importees "

et la macro:

Sub import1()

' import1 Macro

Windows("donnees.xlsm").Activate

Sheets("resolus_incidents").Select

Rows("2:2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

Windows("final.xlsm").Activate

Sheets("importees").Select

Derniereligne = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Rows.Count + 1

Range("A" & Derniereligne).Select

ActiveSheet.Paste

End Sub

Avec toutes mes excuses, la syntaxe exaxte est :

Derniereligne = Range("A" & Rows.Count).End(xlUp).Row + 1

Teste et dis-moi !

bonjour,

ca fonctionne a merveille. merci beaucoup pour l'aide.

peut etre, puis-je avoir l'explication de ce code ?

merci d'avance.

municipum a écrit :

peut etre, puis-je avoir l'explication de ce code ?

Derniereligne = Range("A" & Rows.Count).End(xlUp).Row + 1

Rows.Count est une fonction VBA qui indique le nombre de lignes le la feuille : 65536 si on est en version Excel 2003 ou 1 048 576 lignes si on est en version ultérieure

Range(‘’A’’ & Rows.Count) représente la dernière cellule de la colonne A de la feuille, tout en bas.

Range(‘’A’’ & Rows.Count).End(xlUp) donne la cellule que l’on atteint si on sélectionne cette cellule et que l’on fait : Ctrl + flèche vers le haut, c’est-à-dire la première cellule non vide que l’on a en remontant.

Range(‘’A’’ & Rows.Count).End(xlUp).row donne le numéro de la ligne de cette cellule

Range(‘’A’’ & Rows.Count).End(xlUp). +1 donne la cellule immédiatement au-dessous

OK ?

bonjour,

et encore bien expliqué. merci encore une fois, ça fait plaisir.

bonjour,

de nouveau moi. je rencontre un autre souci maintenant.

j'utilise le code sur un autre fichier de données, sauf que le nom contient des espaces et des "_" " -" des chiffres.

et la le code bug justement dans la ligne d'ouverture. c'est la meme chose dans les feuilles, le code bug au niveau de feuilles contenant un espace dans le nom.

Windows("donnees_du samedi-V2-3.xlsm").Activate

est ce que les espaces et les caractères comme le _ et - compte. est ce qu'il y'a quelque chose a rajouter dans l'instruction?

merci pour votre aide.

Tu devrais joindre ton fichier...

Bye !

bonjour,

je crois que j'ai trouve ou se trouve le probleme. l'editeur vba me change le è en e dans le nom, du coup il connait pas le chemin.

la je suis face a un grand probleme, j'ai un clavier qwerty et j'arrive pa sa ecrire la lettre "è" dans l'editeur. malgre que j'ai change la langue en FR il m'ecris une autre lettre style slave un e avec chapeau inversè !!!!

bonjour,

a nouveau moi.

le tableau dans le classeur final est sous forme Style claire. pourquoi? parce que il y'a derriere un tableau croise dynamique qui s'actualise automatiquement depuis ce qui se trouve dans ce tableau.

est ce que c'est normal que les nouvelles lignes collees dans ce tableau ne sont pas prises en charge par la forme?

quand j'ecris sur la 1ere cellule vide en bas du tableau, je vois que toute la ligne change de couleur est inclue dans la forme du tableau, mais quand c'est toute la ligne qui est collee, il la prend pas en charge.

dois-je changer qqch dans ces lignes de codes:

Rows("2:2").Select

Range (Selection, Selection.End(xlDown)).Select

Selection.Copy

merci pour votre retour.

bonjour,

j'ai trouvee la solution. au lieux de mettre Rows j'ai changee en Range en indiquant la plage ( ex: jusqu'a la colonne Z).

Range("A2:Z2").Select

Range("Z2").Activate

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

Rechercher des sujets similaires à "mon code vba garde memoire chiffre"