IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

code vba pour copier ligne et supp ligne ensuite


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut code vba pour copier ligne et supp ligne ensuite
    Bonsoir après beaucoup de recherche je n'ai pas trouvé ce dont j'ai besoin j'explique en espérant que vous pourrez me dépannez
    j'ai 2 feuil l'une avec tableau nom prénom etc en colonne G j'ai un X qui se coche automatiquement et qui met la ligne en rouge si la personne n'a pas réglé le code est directement mis dans la feuil d'ailleurs il me met débogage dés que je sélectionne la ligne (si vous pouviez me dire ce qui plante):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
    If Not Intersect(Target, Columns("G")) Is Nothing Then
    Select Case Target
    Case "X"
    Target = ""
    Range("A" & Target.Row & ":R" & Target.Row).Interior.ColorIndex = xlNone
    Case ""
    Target = "X"
    Range("A" & Target.Row & ":R" & Target.Row).Interior.ColorIndex = 3
    End Select
    End If
    End Sub
    ensuite une fois la ligne coché avec le X en G je fait ctrld+d pour normalement envoyer vers la feuil archives elles y vont bien avec ce code là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Archives2()
     Macro2 Macro
    '
    ' Touche de raccourci du clavier: Ctrl+d
     Sheets("Archives").Range("A2:R65000").ClearContents
      ligneRecap = 1
      For i = 2 To [a65000].End(xlUp).Row
        If Cells(i, 1).Interior.ColorIndex = 3 Then
          ligneRecap = ligneRecap + 1
          Cells(i, 1).Resize(1, 18).Copy Sheets("Archives").Cells(ligneRecap, 1)
        End If
      Next i
    End Sub
    je voudrais ensuite supprimé du tableau 1 ces lignes archiver j'ai trouver ce code et voir si je ne pourrais pas fusionner les deux dernier code afin de'n'avoir qu'une seul manip :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    For i = [A65000].End(xlUp).Row To 1 Step -1
      If Cells(i, 1) = "xxxx" Then Rows(i).Delete Shift:=xlUp
    Next i
    Application.Calculation = xlCalculationAutomatic
    si je met les deux codes a suivre dans la macro j'ai bien la copie j'ai la suppression mais (trop facile pour moi ) mais cela archives que sur une ligne soit si je met une ligne avec X je clique ligne copier et supp je refait la manip sa le fait mais enlève la ligne que je viens de copier et la remplace j'aimerais que sa aille sur la ligne suivante de façon a récupéré si la personne viens réglé

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Pas certain de bien avoir compris, mais pour supprimer des lignes en boucle, il vaut mieux commencer par la fin.
    Alors quand tu copies ta ligne, aussi bien la supprimer au même moment , non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      For i = [a65000].End(xlUp).Row to 2 Step -1
        If Cells(i, 1).Interior.ColorIndex = 3 Then
          ligneRecap = ligneRecap + 1
          Cells(i, 1).Resize(1, 18).Copy Sheets("Archives").Cells(ligneRecap, 1)
          rows(i).Delete
        End If
      Next i
    Pour ta première question, n'aurais-tu pas dû utiliser Change (changements de valeurs de cellules) plutôt que SelectionChange (changements de cellule) ?

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Stéphane, Parmi, bonsoir le forum,

    Problème 1, peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Option Explicit
     
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Columns("G")) Is Nothing Then
        Select Case Target
            Case "X"
                Target = ""
                Range("A" & Target.Row & ":R" & Target.Row).Interior.ColorIndex = xlNone
            Case ""
                Target = "X"
                Range("A" & Target.Row & ":R" & Target.Row).Interior.ColorIndex = 3
        End Select
    End If
    End Sub
    Problème 2, pratiquement la même réponse que Parmi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Archives2()
    ' Touche de raccourci du clavier: Ctrl+d
     
    Dim DL As Integer
    Dim I As Integer
    Dim DEST As Range
     
    'Macro2 Macro 'à quoi cette ligne correspond-t-elle ?
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Sheets("Archives").Range("A2:R65000").ClearContents
    DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1(=A) de l'onglet actif
    For I = DL To 2 Step -1 'boucle inversée de la dernière ligne DL à la ligne deux par pas de un
        'définit la cellule de destination DEST
        Set DEST = Sheets("Archives").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
        If Cells(I, 7).Value = "X" Then 'condition : si la cellule de la colonne 7 (=G) contient "X"
            Cells(I, 1).Resize(, 18).Copy DEST 'copie la ligne dans DEST
            Rows(I).Delete 'supprime la ligne
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    @ parmi
    bonsoir,

    ce que je cherche a faire c'est copier les lignes ayant le X en colonne G ligne 20 ou 30 (par exemple)de ma feuil membres (ceux qui n'ont pas réglé) elles se copie bien sur la feuil archives a1&a2 les membres n'ayant pas réglé ne sont pas tous sélectionner le même jour et du coup si j'en sélectionne 4 le lendemain ou 2 heure après les lignes se mette bien dans archives mais efface les deux d'avant et se repositionne sur les lignes a1:a2 j'ai besoin de garder toute les ligne archiver au cas ou le membres viendrait a réglé en cour de mois . Ton code fonctionne il m'évite le code supp nickel mais lors d'une deuxième manip pour archiver efface les entrée précédente pour le change sa fonctionne pas

    @ Thautheme
    Bonsoir Thautheme sa fonctionne pas en faite il faudrait pour faire simple que je puisse sélectionner les ligne non regler qu'une fois celle-ci avec le X elle se copie dans archive et quelle se supprime de membres tout en sachant que si j'ai a en sélectionner le lendemain celle de l'aveil doivent rester dans archive

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Alors pourquoi tu as écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Archives").Range("A2:R65000").ClearContents
    Supprime cette ligne et ça ira beaucoup mieux...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    nikel apparement sa fonctionne autant pour moi un grand merci

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    j'ai été trop vite sa fonctionne nickel sauf que sa me rajoute les lignes en dehors de mon tableau et comme ce tableau est relier a un autre tableau qui a des formules recherchev il ne trouve pas les lignes

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Si tu ne regardes pas la couleur, mais le X, alors modifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      For i = [a65000].End(xlUp).Row to 2 Step -1
        If Cells(i, 1).Interior.ColorIndex = 3 Then
          ligneRecap = ligneRecap + 1
          Cells(i, 1).Resize(1, 18).Copy Sheets("Archives").Cells(ligneRecap, 1)
          rows(i).Delete
        End If
      Next i
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      For i = [a65000].End(xlUp).Row to 2 Step -1
        If UCase(Cells(i, 7)) = "X" Then
          ligneRecap = ligneRecap + 1
          Rows(i).Copy Sheets("Archives").Range("A" & ligneRecap )
          Rows(i).Delete
        End If
      Next i

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Bonsoir Thautheme
    me suis emballer trop vite cette nuit tes codes font ce dont j'ai besoin il supp du tableau1 (membres vers archives)pour envoyer sur feuille archives pas de problème et dans la foulée je pensais que ce même code pouvait inverser la chose j'ai donc recrée un deuxième module copier ton code changer la destination Archives vers membres sauf que les lignes s'insert en dessous du tableau 1 qui est en a1:p200 aurait tu une idée pour que sa s’intègre dans le tableau.
    ps: je débute en vba

  10. #10
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Le ping-pong c'est mieux avec une table, des raquettes et une balle non ? Étrange ton idée d'envoyer des lignes dans un onglet, les modifier, puis les renvoyer dans l'onglet de départ. Remettre ces ligne là où elle se trouvaient au départ, je ne vois pas comment !... À mois qu'une des colonnes ne contienne une numérotation ordonnée qui permettrait de repositionner les lignes en fonction...


  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    salut Thautheme non je ne veut pas la remettre la ou elle se trouvait en fait le truc serait le suivant dans ma feuille membre j'ai un tableau disons 500 ligne de 18 colonne remplie sur la colonne G je place un X qui dit que le client y n'a pas régler en mettant le X sa me l'envoi dans la feuille Archives et dans hypotèse ou le client viendrait livré j'aimerais qu'il revienne dans le tableau de départ ton code fonctionne il m’envoie bien les client de la feuil membres vers la feuille archive sans écraser les donnée précédente et de la je me dit que ton code pourrait aussi renvoyer en sens inverse il le fait bien mais à l’extérieur du tableau le but serait que du coup il la renvoi dans le tableau même en dernière position pas grave a charge pour moi de les remettre par ordre alphabétique via le filtre
    cdt

  12. #12
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Stéphane, si tu nous envoyais un fichier exemple avec les deux onglets et une poignée de données, je pense que je comprendrais mieux ton problème et pourrais peut-être le résoudre...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    salut tien voila en pièce jointe enfin si me trompe pas de manip pour vous la mettre
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Ligne de Code VBA pour actualiser des données sous PPT
    Par harald78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2016, 09h27
  2. Code VBA pour copier-coller des colonnes d'un fichier Excel à un autre
    Par User Name dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2014, 23h30
  3. [XL-2007] Code VBA pour supprimer des lignes sous condition - problème
    Par PeaceMaker dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2011, 09h09
  4. Code VbA pour effacer ligne d'un tableau
    Par carottemémé dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2011, 07h09
  5. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 05h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo