Archivage

Bonjour,

J’ai besoin d’un coup de main pour finaliser mon fichier s'il vous plait.

Dans la feuille « En cours » les colonnes vont de A à AO.

Dans ma macro actuelle, comme je l’ai indiqué dans le module 3, elle copie de A1 à J1 de la feuille « En cours » et colle les contenus dans la feuille « Terminés » à partir de la cellule A2.

Ce que je voudrais,

Lorsque je finis de remplir les cellules qui m’intéresse dans la feuille "En cours", je sélectionne une cellule de la ligne qui m’intéresse par exemple A2 et je voudrais en cliquant sur le bouton « transférer dans Terminés », que la macro transfère uniquement le contenu des cellules qui m’intéresse dans la feuille « Terminer » par exemple le contenu de la colonne A, C et D.

Pour info :

A l’ouverture du fichier, si la cellule G1 est rouge, cela signifie que les macros sont désactivées. Si elle est verte, les macros sont actives.

Sub ARCHIVER()

    ActiveCell.Range("A1:j1").Select

  Selection.Copy                                     ' Copie la ligne sélectionnée

    Sheets("Terminés").Select                      'Sélectionne la feuille de destination, cellule A2000
    Range("A2000").Select                ' b remonte vers la 1ère ligne remplie
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Range("A2").Select      'Décale de 1 ligne vers le bas et colle les données
    ActiveSheet.Paste                               'Reviens vers la feuille de départ

End Sub

Merci pour votre aide.

Bonjour,

Depuis quelques temps, j'ai coutume de professer qu'il convient d'expurger tout Select si l'on veut obtenir un code VBA qui se respecte... Je dois dire qu'avec pratiquement un Select par ligne le tien est un défi !!!

Et la première ligne offre une fiabilité à toute épreuve ! On ne peut faire plus aléatoire pour copier... On laisse le soin à l'utilisateur de décider !

Cordialement.

Bonjour,

Pour éviter les select qui sont à priori a bannir moi j'essaierai comme ça

je n'ai pas testé mais ça t'inspirera peut être ..... ou pas

Sub toto()
Dim O As Worksheet 'déclaration pour appeler une feuille avec juste une lettre
Dim S As Worksheet 'pareil
Dim Dl& 'variable qui va permettre de trouver la dernière ligne remplie
Set O = Worksheets("en cours") ' la feuille "en cours" s’appellera o plus facile et rapide a écrire
Set S = Worksheets("terminés") ' pareil qu'au dessus
Dl = S.Range("A" & Rows.Count).End(xlUp).Row ' cherche la dernière ligne remplie de la feuille terminés
O.ActiveCell.Range("A1:J1").Copy S.Range("A" & Dl + 1) 'Dl+1 car tu veux écrire sur la ligne d'en dessous
End Sub

Re,

Avez-bien noté que : exemple : cellule active = E3 => plage copiée = E3:N3

erratum après recherche sur google de activecell donne ça

Sub archiver()
Dim O As Worksheet 'déclaration pour appeler une feuille avec juste une lettre
Dim S As Worksheet 'pareil
Dim Dl& 'variable qui va permettre de trouver la dernière ligne remplie
On Error Resume Next
Set O = Worksheets("en cours") ' la feuille "en cours" s’appellera o plus facile et rapide a écrire
Set S = Worksheets("terminés") ' pareil qu'au dessus
Dl = S.Range("A" & Rows.Count).End(xlUp).Row ' cherche la dernière ligne remplie de la feuille terminés
O.Range(ActiveCell, ActiveCell.Offset(0, 10)).Copy S.Range("A" & Dl + 1) 'Dl+1 car tu veux écrire sur la ligne d'en dessous
End Sub

Mr Ferrand,

en ce qui me concerne je suis loin d'être aussi calé que toi,

donc je me contente d'aider dans mes maigres moyens le demandeur.

Mais en effet je n'aurais pas fait comme ça j'aurais testé une colonne signifiant que la ligne doit passer en terminé et puis j'aurais agi avec une boucle ou en passant par un tableau virtuel en fonction du nombre de données à traiter.

Voili voilou Bon Dimanche à toutes et tous

Bonjour à tous,

A la lecture de la phrase suivante, je crains que la procédure proposée n'apporte pas la solution attendue :

"je voudrais en cliquant sur le bouton « transférer dans Terminés », que la macro transfère uniquement le contenu des cellules qui m’intéressent dans la feuille « Terminer » par exemple le contenu de la colonne A, C et D."

Si je comprends bien, la copie ne concerne qu'un échantillon de la plage Ax:Jx.

Problème : Starr ne dit pas comment se fait le choix de cet échantillon (colonnes pré-définies ou sélection par l'opérateur).

Attendons les explications ...

A+

figuedi a écrit :

erratum après recherche sur google de activecell donne ça


Mr Ferrand,

en ce qui me concerne je suis loin d'être aussi calé que toi,

donc je me contente d'aider dans mes maigres moyens le demandeur.

Mais en effet je n'aurais pas fait comme ça j'aurais testé une colonne signifiant que la ligne doit passer en terminé et puis j'aurais agi avec une boucle ou en passant par un tableau virtuel en fonction du nombre de données à traiter.

Voili voilou Bon Dimanche à toutes et tous

Une bonne méthode, en effet...

Mais outre le problème de sélection, disons flottante... Frangy met en exergue qu'il faudrait établir une macro télépathe !

Avec une centaine de messages, Starr a sûrement eu déjà l'occasion d'avoir diverses explications... qui ne semblent pas avoir eu beaucoup d'effet !

frangy a écrit :

Bonjour à tous,

A la lecture de la phrase suivante, je crains que la procédure proposée n'apporte pas la solution attendue :

"je voudrais en cliquant sur le bouton « transférer dans Terminés », que la macro transfère uniquement le contenu des cellules qui m’intéressent dans la feuille « Terminer » par exemple le contenu de la colonne A, C et D."

Si je comprends bien, la copie ne concerne qu'un échantillon de la plage Ax:Jx.

Problème : Starr ne dit pas comment se fait le choix de cet échantillon (colonnes pré-définies ou sélection par l'opérateur).

Attendons les explications ...

A+

Bonjour,

Merci pour votre retour à tous les trois.

En effet, je me suis bien marré à vox commentaires.

Je ne suis qu'un pauvre débutant en quette de connaissances.

Pour info, tous les trois individuellement, vous êtes meilleurs que moi.

j'ai donc conservé le code de Figuedi qui me semble meilleur en tout point.

et les commentaires de Frangy qui en effet sont intéressantes et merci à Ferrand pour avoir recadré tout le monde.

Sub archiver()
Dim O As Worksheet 'déclaration pour appeler une feuille avec juste une lettre
Dim S As Worksheet 'pareil
Dim Dl& 'variable qui va permettre de trouver la dernière ligne remplie
On Error Resume Next
Set O = Worksheets("en cours") ' la feuille "en cours" s’appellera o plus facile et rapide a écrire
Set S = Worksheets("terminés") ' pareil qu'au dessus
Dl = S.Range("A" & Rows.Count).End(xlUp).Row ' cherche la dernière ligne remplie de la feuille terminés
O.Range(ActiveCell, ActiveCell.Offset(0, 10)).Copy S.Range("A" & Dl + 1) 'Dl+1 car tu veux écrire sur la ligne d'en dessous
End Sub

Pour répondre à cette question de Frangy, le choix de cet échantillon est bien pré-définies, que l'on peut modifier à souhait.

si on choisit de copier le contenu des cellules A, C et D dans un début est très bien, on pourra toujours en ajouter ou retrancher en cas d’évolution du fichier.

Merci à tous les trois (3F) pour votre contribution.

Re,

j'ai donc conservé le code de Figuedi qui me semble meilleur en tout point.

d'accord je suis le seul à avoir écrit 3 lignes mais il à quand même dit que mon code était meilleur !!!!!

mise à part cette auto-vantardise purement humoristique,

ta macro télépathe à besoin d'un minimum d'info pour copier quelque chose quelque part

si tu veux sélectionner manuellement les colonnes que tu veux copier il faut faire ça:

O.Select CurrentRegion: Selection.Copy S.Range("A" & Dl + 1) 

Désolé "Mr Ferrand" mais je ne sais pas comment faire pour ne pas avoir le "select" tant détesté

si tu veux selectionner la cellule A18 et qu'il te copie toutes les colonnes de A à J ligne 18 il faut faire cela

O.Range(ActiveCell, ActiveCell.Offset(0, 10)).Copy S.Range("A" & Dl + 1) 

il doit même y avoir un moyen pour faire une macro random pour qu'il choisisse lui même quelle ligne du veux copier

Tu peux pas éviter Select si pas de critère, c'était déjà le cas avec ActiveCell (pour être active fallait qu'elle soit sélectionnée en amont).

Le cas échéant ça peut être un mode de choix par l'utilisateur, mais vaudrait peut-être mieux alors lui demander confirmation.

Avec un choix aléatoire, là tu n'as plus besoin de Select, ni de rien d'autre .

Ohhh les gars, vous roulez trop vite. je commence a être largué.

Je souhaite juste peu importe le moyen que vous choisissez, une fois que je clic sur ce bouton "Transfert dans Terminés"

avoir les infos des cellules A,C et D prédéfinie au préalable. se transférer de la feuille "En cours" dans la feuille "Terminés"

Si je dois à chaque fois sélectionner manuellement, ça va vitre être ennuyant.

Merci encore,

Comment fais tu le choix des lignes que tu veux ?

C'est la seule question à laquelle il te reste à répondre pour que l'on puisse te donner le coup de main tant espéré

Une fois toutes les colonnes souhaitées sont remplies, je clic dans la colonne A pour sélectionner ma ligne.

Pour copier la ligne 2, je clic dans A2. pour la ligne 10, je clic dans A10. ensuite sur la touche " Transfert dans Terminés"

A votre service,

alors je ne sais pas faire

ce que je pense savoir faire c'est ça :

rajoute une colonne a ton tableau en "BL" et tu mets dedans ok parce que tu veux copier cette ligne

Sub Archiver()
Dim O As Worksheet 'déclaration pour appeler une feuille avec juste une lettre
Dim S As Worksheet 'pareil
Dim Dl& 'variable qui va permettre de trouver la dernière ligne remplie
Dim DLIecr 'variable pour lecture d’écriture
On Error Resume Next
Set O = Worksheets("en cours") ' la feuille "en cours" s’appellera o plus facile et rapide a écrire
Set S = Worksheets("terminés") ' pareil qu'au dessus
Dl = O.Range("A" & Rows.Count).End(xlUp).Row
DLIecr = S.Range("A" & Rows.Count).End(xlUp).Row + 1
For i = 1 To Dl
    If O.Range("BL" & i) = "ok" Then
        S.Range("A" & DLIecr) = O.Range("A" & i)
        S.Range("C" & DLIecr) = O.Range("C" & i)
        S.Range("D" & DLIecr) = O.Range("D" & i)
        DLIecr = DLIecr + 1
    End If
Next i
End Sub

Il ta un truc qui cloche.

j'ai fait comme tu as dit: ajout d'une colonne BL dans laquelle je mets ok mais pas d'action.

j'ai modifié le nom des feuilles en cours par En cours et terminés par Terminés mais rien.

il ne se passe rien.

j'ai copié le code dans une feuille "En cours" pas d'action. Je l'ai ensuite attribué à la touche " Transfert dans Terminés" mais toujours rien.

Peux tu revoir stp.

Merci,

ok doit être en minuscule

les noms des feuilles tu peux les écrire en majuscule ou minuscule ça n'a pas d'importance

sinon tu forces les majuscules au moins tu es sur de ne pas être embêté

 If UCase(O.Range("BL" & i)) = "OK" Then

Figuedi,

je ne sais comment te remercier.

tu viens de faire de moi une personne heureuse là. franchement un grand merci à toute l'équipe, d'avoir pris de votre temps pour m'aider. Merci mille fois.

Rechercher des sujets similaires à "archivage"