Créer une macro avec condition

Résolu
Bonjour,

je n'arrive pas à créer ma macro
débutante dans ce domaine
je cherche à déplacer les lignes complètes dont les tâches ont été effectué dans le tableau "tâches à effectuer"
on selection la ligne et en cliquant sur un bouton active exemple "ok" la ligne se déplace automatiquement dans le tableau "tâches effectuées"

EXEMPLES SIMPLES

tâches à effectuer
xxxxxxxxx 12/11/2012
bbbbbbbbbbbb 06/12/2012
aaaaaaaaaaaa 04/01/2013

tâches effectuées
ooooooooooo 06/10/2012
tttttttttttttttt 04/06/2012

Merci de votre aide

4 réponses

  1. Contributeur
    Bonjour

    Tes 2 tableaux sont ils sur la même feuille ?

    quelle sont les colonnes utilisées par tes tableaux ?

    au besoin
    mettre le classeur sans données confidentielles en pièce jointe sur
    https://www.cjoint.com/
    puis copier l'adresse du lien et la coller dans le message de réponse
    0
    1. la boite me refuse l'acces à https://www.cjoint.com/
      désolé je ne peux vous joindre mon dossier

      5 colonnes : A - B - C - D - E

      A (numéro des taches)
      B (désignation)
      C (importance)
      D (date a effectuer)
      E nom du technicien

      18 lignes qui concernent les taches à effectuées

      et 6 lignes qui concernent les taches déjà éffectuées

      soit à ta question
      " Tes 2 tableaux sont ils sur la même feuille ? " = OUI

      j'espere vous avoir aidé dans ma réponse

      en vous remerciant d'avance de votre aide
      0
  2. Contributeur
    Re, comme ta boutique refuse l'accès à cjoint , je ne peux pas t'envoyer ma maquette ! :o(

    Donc:

    1 a macro ci dessous vérifie que la ligne sélectionnée est bien dans le tableau "à effectuer"
    2 elle mémorise les colonnes A à E de la ligne et supprime la ligne
    3 les données sont inscrites à la fin du tableau "effectué"

    Sub transférer_w_effectué() 
    
    lig_w = ActiveCell.Row 
    derlig = Columns("A").Find("", Range("A2")).Row - 1 
    'détecion ligne en dehors du tableau "à réaliser" 
    If derlig < lig_w Then GoTo erreur 
    'mémorise la ligne à transfèrer 
    w_fini = Range(Cells(lig_w, "A"), Cells(lig_w, "E")).Value 
    ' supprime cette ligne ligne 
    Rows(lig_w).Delete 
    
    ligvid = Columns("A").Find("*", , , , , xlPrevious).Row + 1 
    Range("A" & ligvid).Resize(1, 5) = w_fini 
    Exit Sub 
    
    erreur: 
    MsgBox "mauvaise sélection de ligne", vbCritical 
    
    
    End Sub


    edit 14:45 simplifié la macro
    Michel
    0
    1. je sais que cela n'est pas la procédure mais avez vous un mail auquel je peux vous envoyer le dossier
      la macro ne marche pas
      en attente de vous lire
      merci
      0
      1. Contributeur
        j'ai fait une maquette et ca fonctionnait suivant les spécifications que tu m'as donné

        la maquette (à regarder peut-^tre à la maison)
        https://www.cjoint.com/?3Kmpuk17dKE

        ou por transmettre le dossier utilises la possibilité de message perso de CCM
        0
      2. merci michel_m et ccm81 tout marche chez moi mais au travail c'est une grande histoire
        il me bloque l'accès et je ne peux l'utiliser correctement
        merci encore de votre aide
        0
    2. bonjour

      Une proposition un peu différente de celle de michel (salut à toi)
      Le tableau 1 des taches à effectuer reste "entier" ici en A3:E19, ce qui te permet de rajouter des tâches (à effectuer)

      - à mettre dans le module de la feuille active
      - la macro est à activer par un double clic sur une cellule de la ligne à transférer

      Option Explicit
      
      Const T1 = "A3:E19"
      Const lideb1 = 3
      Const lifin1 = 19
      
      Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      Dim li1 As Long, plage1 As String
      Dim lifin2 As Long
      If Target.Value = "" Or Intersect(Target, Range(T1)) Is Nothing Then Exit Sub
      ' ligne à deplacer
      li1 = Target.Row
      plage1 = "A" & li1 & ":E" & li1
      ' 1° ligne vide tableau T2
      lifin2 = Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
      ' copie li1 sur lifin2
      Range(plage1).Copy Cells(lifin2, 1)
      ' remonter les lignes de T1
      If li1 = lifin1 Then
        plage1 = "A" & li1 & ":E" & li1
        Range(plage1).ClearContents
      Else
        For li1 = li1 + 1 To lifin1
          plage1 = "A" & li1 & ":E" & li1
          Range(plage1).Copy Cells(li1 - 1, 1)
          Range(plage1).ClearContents
        Next li1
      End If
      End Sub
      

      bonne suite
      0