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 :

déplacement des lignes sous conditions


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut déplacement des lignes sous conditions
    Bonjour,

    je reviens demander de l'aide s'il vous plait un code :

    je veux déplacé (ensuite les supprimé) des lignes d'une feuille a une autre sous 3 conditions:

    je dois avoir dans les colonnes h,j, et l; le mot"reussi",


    en vous remerciant d'avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Employé
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Employé
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Pourquoi les déplacer puis les supprimer ? Il ne serait pas plus simple de les supprimer directement ?

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste ce qui suit sur une copie de ton classeur et adapte les points indiqués dans le code (commentaires) :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Sub CopierSupprimer()
     
        Dim LaPlage As Range
        Dim I As Long
     
        'défini la plage de recherche sur toute la feuille
        'pour connaître le nombre de lignes à boucler
        'à adapter car à ce stade pas plus de précisions
        Set LaPlage = Plage(Worksheets("Feuil1"))
     
        'boucle sur les lignes de la feuille "Feuil1" (à adapter)
        'en partant du bas (pour pouvoir supprimer) et colle dans
        'la feuille "Feuil2" (à adapter) la ligne entière à la suite
        'des autres puis supprime la ligne
        For I = LaPlage.Rows.Count To 1 Step -1
            If Range("H" & I) = "Réussi" _
                And Range("J" & I) = "Réussi" _
                And Range("L" & I) = "Réussi" Then
                    Rows(I).EntireRow.Copy _
                    Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                    LaPlage.Rows(I).EntireRow.Delete
            End If
        Next I
     
     
    End Sub
     
    Function Plage(Fe As Worksheet) As Range
     
        With Fe
            Set Plage = .Range(.Cells(1, 1), _
                        .Cells( _
                        .Cells.Find("*", .[A1], -4123, , _
                        1, 2).Row, _
                        .Cells.Find("*", .[A1], -4123, , _
                        2, 2).Column))
        End With
     
    End Function
    Hervé.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour Hervé,

    merci beaucoupppppppppppppppp ca marche trés bien;neanmoins j'ai 2 questions si tu permets :

    1- l'action du copie et de la suppression ne s'effectue que en ayant la feuille active en face (feuil1), sachant que mon petit projet est accessible seulement via le userform sans passer par les feuilles de calcul, j'ai essayé avec workbook_activate; workbook_open; userform_intializae...mais j'ai pas reuusi a chaque fois il fallait que la feuille 1 soit activé;;;;as tu une idée pour que l'action soit automatismé a l'ouverture du classeur ou en avec un bouton de mise a jour sur mon USF s'il te plais.

    2-elle sert a quoi ce code j'essaye de comprendre s'il te plais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Plage(Fe As Worksheet) As Range
     
        With Fe
            Set Plage = .Range(.Cells(1, 1), _
                        .Cells( _
                        .Cells.Find("*", .[A1], -4123, , _
                        1, 2).Row, _
                        .Cells.Find("*", .[A1], -4123, , _
                        2, 2).Column))
        End With
     
    End Function
    a te lire et bonne journnée

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour tazko,

    Comme tu appelle le code depuis un UserForm, j'ai modifié le code. La proc est lancée depuis un bouton en passant en argument les feuilles sur lesquelles travailler là, tu doit adapter le nom des deux feuilles (voir commentaire).
    La fonction Plage recherche la dernière cellule non vide de la feuille contenant n'importe quel carractère (d'où l'astérisque *) et retourne un range de A1 à cette dernière cellule. Ici, comme tu n'as besoin que du numéro de ligne (je suis aller un peu trop vite en utilisant cette fonction) une simple recherche de ce numéro est suffisante d'où la ligne "Ligne = .Cells.Find("*", .[A1], -4123, , 1, 2).Row". La fonction Plage ne t'es plus utile, tu peux la virer. Voici le code à mettre dans le module de ta Form :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Private Sub CommandButton1_Click()
     
        'appel de la proc depuis un bouton sur l'UserForm
        'en passant en argument les feuilles sur laquelles
        'effectuer les modification, une étant la feuille
        'd'origine où sont copiées les lignes et ensuite supprimées
        'et l'autre, la feuille de destination où sont collées les lignes
        '>>adapter ici le nom des feuilles cibles<<
        CopierSupprimer Worksheets("Feuil1"), Worksheets("Feuil2")
     
    End Sub
     
    Sub CopierSupprimer(FeOrigine As Worksheet, _
                        FeDestination As Worksheet)
     
        Dim Ligne As Long
        Dim I As Long
     
        'recherche la dernière ligne non vide de la feuille
        With FeOrigine
            Ligne = .Cells.Find("*", .[A1], -4123, , 1, 2).Row
        End With
     
        'boucle sur les lignes de la feuille "FeOrigine"
        'en partant du bas (pour pouvoir supprimer) et colle dans
        'la feuille "FeDestination" la ligne entière à la suite
        'des autres puis supprime la ligne
        For I = Ligne To 1 Step -1
            If Range("H" & I) = "Réussi" _
                And Range("J" & I) = "Réussi" _
                And Range("L" & I) = "Réussi" Then
                    FeOrigine.Rows(I).EntireRow.Copy _
                    FeDestination.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                    FeOrigine.Rows(I).EntireRow.Delete
            End If
        Next I
     
     
    End Sub
    Hervé.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    bonjour Hervé,

    Merci encore pour ta réponse rapide, le code fonctionne mais j'ai toujours le même souci, mon USF doit être affiché sur la feuille d'origine ou bien sur la feuille de destination, sinon il ne fonctionne pas;;je te joins le fichier pour voir plus clair.
    en te remerciant beaucoup, car rien a ce stade je suis très content.

    a te lire
    amicalement
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Re-bonjour Hervé,

    en relisant mon message j'ai trouvé que je n'etait pas poli désolé ..
    s'il te plais si tu peux m'aider biensure......

    amicalement

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, tazko, Hervé,

    Si je peux me permettre, tu vas dans les propriétés de ton USF => showmodal = false

    tu ajoutes au besoin, ta ligne de code en feuil1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
    UserForm1.Show
    End Sub
    je pense que ça doit résoudre ton problème

    Bonne journée

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour casefayere,

    je te remercie pour ton aide, ca m'a permis d'apprendre encore (je ne savais pas qu'on peut lançais un USF avec cette méthode), il fonctionne tres bien il faut que je passe par la feuille1,mais ca resouds toujours mon problème:

    en faite une fois que mon petit projet est fini, je ne passerais plus par les feuilles excel, elles seront masquées en plus , c'est pour cela j'essaye de trouvé un moyen de validation de la macros via mon userform...
    grâce a Hervé j'ai pu beaucoup avancé dans mon travail et il me reste juste ce point la a revoir.

    A te lire
    amicalement

Discussions similaires

  1. [XL-2007] Macro pour supprimer des lignes sous conditions de valeur de cellule
    Par frisco75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2011, 15h33
  2. [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, 10h09
  3. Masquer des lignes sous condition
    Par linousxm dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2010, 14h19
  4. copier des lignes sous conditions (dans 2 colonnes différentes)
    Par olive08 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 12/10/2007, 15h44
  5. Suppression des lignes sous condition multiple
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2007, 17h23

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