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 conditionnel de champs dans une feuille suivante. [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Déplacement conditionnel de champs dans une feuille suivante.
    Bonjour.

    je rencontre un problème avec les macros Excel, et le déplacement de lignes fonctionne... malheureusement pas comme je le souhaite.

    J'ai en premier lieu, une macro qui me colore en rouge, un champ en doublon (oui bon, j'avais oublié l'existence des mises en forme conditionnelles) qui fonctionne nickel, cependant, pour le déplacement, j'ai plus l'impression que la macro me déplace aléatoirement des noms d'une feuille à une autre... pourtant, je ne pense pas avoir fait d'erreur dans le choix de mes conditions...

    Voici le code, en espérant que cela parle à quelqu'un.


    Cordialement.

    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
     
    Sub DeplaceDoublon()
        Dim xRg As Range
        Dim xCell As Range
        Dim I As Long
        Dim J As Long
        Dim K As Long
        I = Worksheets("Feuil1").UsedRange.Rows.Count
        J = Worksheets("Feuil2").UsedRange.Rows.Count
        If J = 1 Then
           If Application.WorksheetFunction.CountA(Worksheets("Feuil2").UsedRange) = 0 Then J = 0
        End If
        Set xRg = Worksheets("Feuil1").Range("C1:C" & I)
        On Error Resume Next
        Application.ScreenUpdating = False
        For K = 1 To xRg.Count
            If (Cells(1, I).Interior.ColorIndex = 3) Then
                xRg(K).EntireRow.Copy Destination:=Worksheets("Feuil2").Range("A" & J + 1)
                xRg(K).EntireRow.Delete
                J = J + 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     I = Worksheets("Feuil1").UsedRange.Rows.Count
    For K = 1 To xRg.Count
            If (Cells(1, I).Interior.ColorIndex = 3) Then
    Je ne sais pas exactement de quelle cellule tu souhaites tester la couleur je doute que ce soit celle là vu qu'elle ne changeras jamais de toute ta boucle.

    De plus je conseille de faire ta boucle à l'envers (For K = xRg.Count To 1 step -1) car sinon tu risque de louper des lignes si tu as deux doublons consécutifs.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Ah, en effet, j'aurai du être un peu plus explicite là dessus.

    C'est bel et bien la première colonne qui est testée, car contenant des adresses mail assignées à des entreprises différentes.

    J'ai déjà remplacé la ligne indiquée et vais tester, je reviens ensuite vers toi.

    Merci.

    Cette fois le déplacement fonctionne (j'ai d'aileurs corrigé une petite erreur de saisie, remplacé le "1" par un "A" dans ma sélection). Cette fois le déplacement me copie toutes les valeurs sans exception dans la feuille 2.

    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
    Sub DegageBlon()
        Dim xRg As Range
        Dim xCell As Range
        Dim I As Long
        Dim J As Long
        Dim K As Long
        I = Worksheets("Feuil1").UsedRange.Rows.Count
        J = Worksheets("Feuil2").UsedRange.Rows.Count
        If J = 1 Then
           If Application.WorksheetFunction.CountA(Worksheets("Feuil2").UsedRange) = 0 Then J = 0
        End If
        Set xRg = Worksheets("Feuil1").Range("C1:C" & I)
        On Error Resume Next
        Application.ScreenUpdating = False
        For K = xRg.Count To 1 Step -1
            If (Cells(A, I).Interior.ColorIndex = 3) Then
                xRg(K).EntireRow.Copy Destination:=Worksheets("Feuil2").Range("A" & J + 1)
                xRg(K).EntireRow.Delete
                J = J + 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    le code avec la petite correction, ainsi que la ligne indiquée qui est modifiée.

    Cdlt.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu souhaites exporter des lignes suivant des critères, je ne peux que te suggérer l'utilisation de la méthode AdvancedFilter de l'objet Range
    C'est la méthode la plus simple et la plus rapide à programmer (1 ligne de code après avoir défini les zones des données, de critères et de destination) si tu comprends le principe des filtres avancés

    A lire éventuellement Les filtres avancés ou élaborés dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Citation Envoyé par Abnihs Voir le message
    C'est bel et bien la première colonne qui est testée, car contenant des adresses mail assignées à des entreprises différentes.

    If (Cells(A, I).Interior.ColorIndex = 3) Then
    Cells à pour paramètre (ligne,colonne) si tu veux regarder dans la première colonne c'est cells(ligne,1) ou cells(ligne,"A") (attention aux guillemets) qu'il faut écrire
    De plus I d'après ton code représente le nombre de lignes max de ta feuille 1 et n'est donc pas une variable de ta boucle sur K
    Du coup je pense ta ligne est fausse, j'aurais écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Cells(K,"A").Interior.ColorIndex = 3) Then
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Si tu souhaites exporter des lignes suivant des critères, je ne peux que te suggérer l'utilisation de la méthode AdvancedFilter de l'objet Range
    C'est la méthode la plus simple et la plus rapide à programmer (1 ligne de code après avoir défini les zones des données, de critères et de destination) si tu comprends le principe des filtres avancés

    A lire éventuellement Les filtres avancés ou élaborés dans Excel
    Merci du conseil, je vais aller lire ça.

    Citation Envoyé par halaster08 Voir le message
    Cells à pour paramètre (ligne,colonne) si tu veux regarder dans la première colonne c'est cells(ligne,1) ou cells(ligne,"A") (attention aux guillemets) qu'il faut écrire
    De plus I d'après ton code représente le nombre de lignes max de ta feuille 1 et n'est donc pas une variable de ta boucle sur K
    Du coup je pense ta ligne est fausse, j'aurais écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Cells(K,"A").Interior.ColorIndex = 3) Then
    C'est bien cela. La ligne était fausse. Suite à ta correction, cela fonctionne sans souci.
    Je pense que j'ai besoin de me documenter davantage, haha.

    Merci à vous.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Selection de champs dans une feuille
    Par lyonnaisdu26 dans le forum QlikView
    Réponses: 2
    Dernier message: 30/09/2011, 13h58
  2. [AC-2007] Remplir un champ dans une feuille de données
    Par Kawabaumga dans le forum IHM
    Réponses: 6
    Dernier message: 07/05/2010, 15h48
  3. Réponses: 0
    Dernier message: 07/02/2008, 05h52
  4. Champ invisible dans une feuille de donnée ?
    Par en_gel_ho dans le forum Access
    Réponses: 2
    Dernier message: 28/09/2006, 10h01
  5. Réponses: 9
    Dernier message: 17/10/2005, 17h13

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