transfer donnée feuille 1 vers feuille 2

0

Bonjour le forum

Ayant constaté que ce forum abrite des pointures en VBA , Je me permets de vous demander de l’aide concernant la création d’une macro, Qui aurait pour but de déplacer une ligne de la feuille 1 vers la feuil2. Je pense que vu le niveau des intervenants ma macro ne devrais pas poser de problème majeur, et vous remercies par avance.

A savoir je suis nul en VBA

Je suis encore sous Excel 2013

Présentation et Explication du résultat que je souhaiterais

Tableau de 100 lignes et 16 colonnes Je souhaiterais que la macro fasse ces actions

(Colonne A5 :A15 réservée à la commande de transfert vers feuille 2)

Je clic sur n’importe quelle cellule entre A5.A15, cela déclenche le saut de la ligne sélectionnée vers la feuille 2, (A5 est le départ des lignes de saisie)

La ligne qui est transférée vers la feuille 2 disparait de la feuille 1, et vient se placer sous la dernière ligne vide de la feuille 2. (Première ligne du tableau = A5).

Noms des feuilles : feuille1= taches à effectuer/feuille 2= tâches effectuées

J’ai essayé de copier des macros sur des forums, mais je n’arrive pas à les adapter à mon tableau

Merci pour votre aide



    Posté le 25 mars, 22:28
    par chanel
    Répondre
    0

    Bonjour chanel,

    je veux bien t'aider si tu joins ton fichier Excel, avec quelques données.

    va sur le site cjoint.com pour y déposer ton fichier Excel ; tu auras alors un
    lien de téléchargement à copier / coller dans ton prochain post du forum.

    rhodo

    rhodo Posté le 26 mars, 05:55
    par rhodo
    • Bonjour Rhodo et merci pour cette réponse rapide, et d'accepter de m'aider, j'ai mis sur cjoint.com mon fichier, j'ai fais sur une ligne un exemple, mais toutes les lignes aurons sensiblement le même format a savoir du texte, sauf E et F qui auront des dates et des formules conditionnelles pour changement de couleurs. https://www.cjoint.com/c/NCAlu6ZKr6U26 mars, 12:36
    0

    @chanel

    lien fichier : https://www.cjoint.com/c/NCAqHvfqND0

    je te propose une meilleure solution, qui est sans coches « ✓ ».

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à l'ouverture du fichier, tu es sur la 2ème feuille "tâches effectuées" ;
    note qu'il n'y a aucune donnée ; va sur la feuille "tâches à effectuer".

    tu n'avais mis qu'une seule ligne, mais il en fallait plusieurs ; comme
    j'ai pas voulu perdre de temps à inventer des données, j'en ai mis des
    simples : c'est juste une lettre.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    mettons que tu veux déplacer la ligne 7 ; sélectionne A7 et fais
    Ctrl d (d pour déplacement) ➯ la ligne a bien été déplacée.

    note bien que sur la 1ère feuille "tâches à effectuer", les données
    qui étaient sous la ligne déplacée sont remontées d'une ligne.

    va sur la 2ème feuille "tâches effectuées" ; en ligne 4, tu peux voir
    la ligne qui a été déplacée ; si y'avait eu plusieurs autres lignes,
    la ligne déplacée serait la dernière ligne.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    on va tout d'suite le vérifier ; retourne sur la 1ère feuille ; sélectionne
    A8 et fais Ctrl d ; sélectionne A5 et fais Ctrl d ; va en 2ème feuille :
    les lignes déplacées ont bien été ajoutées en dessous.  :)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    bonus : sur chaque feuille, fais Ctrl F2 pour voir l'Aperçu avant
    impression
     : j'ai mis la bonne mise en page.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    quand plus tard tu ajouteras d'autres colonnes, ça sera inutile
    de modifier le code VBA : la macro DplLig() en tiendra compte
    automatiquement.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    code VBA de Module2 (14 lignes) :

    Option Explicit

    Sub DplLig()
      If ActiveSheet.Name <> "tâches à effectuer" Then Exit Sub
      Dim r&: r = ActiveCell.Row: If r < 4 Then Exit Sub
      If Cells(r, 2) = "" Then Exit Sub
      Dim p As range, d&, n%: n = Cells(2, Columns.Count).End(1).Column - 1
      With Worksheets("tâches effectuées")
        d = .Cells(Rows.Count, 2).End(3).Row + 1: If d < 4 Then d = 4
        Set p = Cells(r, 2).Resize(, n): Application.ScreenUpdating = 0
        p.Copy .Cells(d, 2): p.Delete 2
      End With
    End Sub

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 26 mars, 17:35
    par rhodo
    0

    Bonsoir Rhodo

    Un grand merci pour ton retour et pour le temps que tu a passé a me rendre service.

    Cela fonctionne parfaitement bien,c'est une merveille, c'est exactement le résultat que j'attendais (le seul petit détail, est t'il possible que le fichier s'ouvre sur la feuille "taches a effectuer "), sinon pour le reste tout est parfait tu as même, avec tes suggestions amélioré mon idée.

    Chanel

    Posté le 26 mars, 19:02
    0

    @Chanel

    j'suis bien content que ma solution te plaise.  :)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    tu as écrit : « est-il possible que le fichier s'ouvre sur la feuille
    "tâches à effectuer" ».

    c'est car j'avais sauvegardé le fichier en étant sur la 2ème feuille
    "tâches effectuées" que lorsque tu as ouvert le fichier, la feuille
    active était cette 2ème feuille "tâches effectuées".

    SI j'avais sauvegardé le fichier en étant sur la 1ère feuille "tâches
    à effectuer
    ", alors quand tu aurais ouvert le fichier, la feuille active
    aurait été cette 1ère feuille "tâches à effectuer".

    c'est-à-dire qu'en ouvrant un fichier Excel, la feuille active est
    la même que la feuille sur laquelle on était quand on avait
    sauvegardé le fichier ; donc ma 1ère réponse est celle-ci :

    il te suffit de sélectionner la feuille "tâches à effectuer" puis
    de sauvegarder ; ainsi, à la prochaine ouverture du fichier,
    ça sera bien sur la feuille "tâches à effectuer".

    si c'est juste ça, continue d'utiliser le fichier que je t'ai passé ;
    sinon, lis la suite de ce post.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    comme ce qui est ci-dessus me paraît trop simple, je suppose que
    tu as voulu dire : « est-il possible que le fichier s'ouvre sur la feuille
    "tâches à effectuer" même si l'utilisateur avait sauvegardé le fichier
    en étant sur la feuille "tâches effectuées" » ; si c'est bien ça, alors
    voici ma 2ème réponse :

    oui, c'est possible ; je l'ai fait dans le fichier joint ci-dessous ;
    code VBA de Module2 : inchangé ; j'ai seulement ajouté
    ce très court code VBA dans le module de ThisWorkbook :

    Private Sub Workbook_Open()
      Worksheets("tâches à effectuer").Select
    End Sub

    ainsi, à l'ouverture du fichier, ça sera toujours sur la 1ère feuille
    "tâches à effectuer", quelle que soit la feuille sur laquelle on
    était quand on avait sauvegardé le fichier.

    lien fichier : https://www.cjoint.com/c/NCAt4RulAd0

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 26 mars, 21:00
    par rhodo
    0

    Merci pour la  modif tout fonctionne très bien, une dernière question,est t'il possible sans macro de rendre plus visible la cellule sélectionnée pour le transfert .

    (idéalement quelle se colore a la sélection )

    Chanel

    Posté le 26 mars, 21:55
    0

    Bonjour Chanel,

    j'ai bien compris ta nouvelle demande, mais je ne connais pas de moyen
    pour la faire sans macro ; je te propose donc une solution avec macro.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    lien fichier : https://www.cjoint.com/c/NCBaReGbay0

    même utilisation que celle du fichier précédent.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    code VBA du module de Feuil1 (tâches à effectuer) ; 20 lignes :

    Option Explicit

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim n%, d&: Application.ScreenUpdating = 0
      n = Cells(2, Columns.Count).End(1).Column - 1
      d = Cells(Rows.Count, 2).End(3).Row
      If d > 3 Then [B4].Resize(d - 3, n).Interior.Color = -4142
      With Target
        If .Column <> 1 Then Exit Sub
        If .Row < 4 Then Exit Sub
        With .Offset(, 1)
          If .Value = "" Then Exit Sub
          With .Resize(, n).Interior
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = 0.799981688894314
          End With
        End With
      End With
    End Sub

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    dans Module2 : pour la sub DplLig(), juste avant le End With,
    j'ai ajouté cette ligne de code VBA :

    .Cells(d, 2).Resize(, n).Interior.Color = -4142

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 27 mars, 01:20
    par rhodo
    0
    Bonjour Rhodo
    J'ai téléchargé le nouveau dossier modifier, mais quand je sélectionne ex:A8, il n'y a qu'un très
    léger gris (presque invisible) qui colore  les cellule B8:I8.
    comment faire pour avoir une couleur plus soutenue ex: vert clair ou autre.
    Merci . 
    Chanel 

    Posté le 27 mars, 11:04
    0

    @Chanel

    lien 1 : image 1

    avec le fichier précédent, c'est déjà du vert clair ; mais c'est
    selon la version de mon Excel : 2021 ; avec ton Excel 2013,
    je ne sais pas quel est le code de thème à mettre.

    ------------------------------------------------------------------------------------

    lien 2 : image 2

    avec le nouveau fichier ci-dessous, j'espère que tu auras
    la même couleur que sur image 2.

    ------------------------------------------------------------------------------------

    lien 3 : fichier Excel

    code VBA du module de Feuil1 (tâches à effectuer) ;
    j'ai un peu modifié la fin ; au lieu de :

    With .Offset(, 1)
      If .Value = "" Then Exit Sub
      With .Resize(, n).Interior
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.799981688894314
      End With
    End With

    c'est maintenant :

    With .Offset(, 1)
      If .Value = "" Then Exit Sub
      .Resize(, n).Interior.Color = 13434828
    End With

    ------------------------------------------------------------------------------------

    si tu veux mettre précisément une autre couleur :

    * dans un classeur vierge, utilise l'Enregistreur de macro ;
    pour une cellule, met la couleur de remplissage que tu
    aimes bien ; arrête l'Enregistreur de macro.

    * regarde le code VBA généré ; tu auras par exemple :

    Sub Macro1()
    '
    ' Macro1 Macro
    '

    '
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0
        End With
    End Sub

    * pour les 2 lignes en gras, note les valeurs.

    * dans ton fichier réel, utilise mon code initial,
    avec les mêmes valeurs :

    With .Offset(, 1)
      If .Value = "" Then Exit Sub
      With .Resize(, n).Interior
       .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.799981688894314
      End With
    End With

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * SI le code généré a utilisé .Color = ... (valeur X)
    utilise ceci :

    With .Offset(, 1)
      If .Value = "" Then Exit Sub
      .Resize(, n).Interior.ColorX
    End With

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * SI le code généré a utilisé .ColorIndex = ... (valeur X)
    utilise ceci :

    With .Offset(, 1)
      If .Value = "" Then Exit Sub
      .Resize(, n).Interior.ColorIndex = X
    End With

    ------------------------------------------------------------------------------------

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 27 mars, 18:05
    par rhodo
    0

    Bonjour Rhodo

    j'ai bien simulé une macro pour recherche de couleur ,mais je n'arrive pas a l'intégrer au module 2 ( je l'ai simulé en A6).


    Macro simulation

    With Selection.Interior
      .Pattern = xlSolid
      .PatternColorIndex = xlAutomatic
      .Color = 192
      .TintAndShade = 0
      .PatternTintAndShade = 0
      End With
    End Sub

    Module 2

    Sub DplLig()
      If ActiveSheet.Name <> "tâches à effectuer" Then Exit Sub
      Dim r&: r = ActiveCell.Row: If r < 4 Then Exit Sub
      If Cells(r, 2) = "" Then Exit Sub
      Dim p As Range, d&, n%: n = Cells(2, Columns.Count).End(1).Column - 1
      With Worksheets("tâches effectuées")
      d = .Cells(Rows.Count, 2).End(3).Row + 1: If d < 4 Then d = 4
      Set p = Cells(r, 2).Resize(, n): Application.ScreenUpdating = 0
      p.Copy .Cells(d, 2): p.Delete 2
      .Cells(d, 2).Resize(, n).Interior.Color = -0.249977111117893
      End With
    End Sub

    Merci de ton aide (ça  te donne une idée de mon niveau).

    Chanel

    Posté le 28 mars, 17:06
    0

    Bonsoir Chanel,

    désolé pour le retard de ma réponse.

    lien 1 : image ; lien 2 : fichier Excel

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    il ne fallait pas modifier la sub DplLig() ; donc Module2 : inchangé ;
    code VBA du module de Feuil1 (tâches à effectuer) ; 19 lignes :

    Option Explicit

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim n%, d&: Application.ScreenUpdating = 0
      n = Cells(2, Columns.Count).End(1).Column - 1
      d = Cells(Rows.Count, 2).End(3).Row
      If d > 3 Then [B4].Resize(d - 3, n).Interior.Color = -4142
      With Target
        If .Column <> 1 Then Exit Sub
        If .Row < 4 Then Exit Sub
        With .Offset(, 1)
          If .Value = "" Then Exit Sub
          With .Resize(, n).Interior
            .Color = 192: .TintAndShade = 0.249977111117893
          End With
        End With
      End With
    End Sub

    ci-dessus, la partie de code VBA concernée est notée en gras ;
    tu devrais avoir le rouge clair de l'image jointe.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    pour info : quand tu vois dans mes 2 macros le code -4142, ne le
    modifie pas ; c'est l'équivalent numérique de la constante VBA
    xlNone ; vu le contexte, c'est : pas de couleur de remplissage.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    à te lire pour avoir ton avis.  :)

    rhodo

    rhodo Posté le 28 mars, 21:54
    par rhodo
    0

    Bonjour Rhodo

    ça fonctionne très bien, j'ai uniquement modifié dans le module 2

    .Cells(d, 2).Resize(, n).Interior.Color = -0.249977111117893:

    par

    .Cells(d, 2).Resize(, n).Interior.Color = RGB(255, 255, 255)

    afin d'avoir des lignes blanche en feuille 2

    Merci infiniment pour ton aide, et espère ne pas avoir trop abusé de ton temps.

    Cordialement.

    Chanel



    Posté le 29 mars, 15:09

    Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
    Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :