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 :

Remplir un tableau sous condition [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour a tous. ☼ ☼

    Voici le code de "casefayere" qui récupère le contenu de la plage de cellules "A1:E2" de la "Feuil1" dans un tableau et transfert les données dans "Feuil2" sur une ligne en "A1:J1".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Tablo = Range("A1:E2")
    Dim x, y, Z
        Z = 0
        For x = 1 To 2 'nb lignes
            For y = 1 To 5 'nb colonnes
                Z = Z + 1
                Sheets(2).Cells(1, Z) = Tablo(x, y)
            Next y
        Next x
    Est-ce possible de récupérer le contenu de la plage de cellules "A1:E2" de la "Feuil1" dont la valeur de la cellule est > à 0 et la couleur de fond blanc et transférer les données dans "Feuil2" sur une ligne en "A1".

    Je n'ai pas trouvé de réponse à cette question un peu spéciale, avez-vous peut-être une solution.

    Merci d'avance pour votre aide.

    Bonsoir.

    J'ai modifié le code, pour les cellule dont la valeur est > à 0 cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Tablo = Range("A1:E2")
    Dim x, y, Z
        Z = 0
        For x = 1 To 2 'nb lignes
            For y = 1 To 5 'nb colonnes
                If Arr(x, y) >0 Then
                    Z = Z + 1
                    Sheets(2).Cells(1, Z) = Arr(x, y)
                End If
        Next x
    Je n'ai pas trouvé de solution pour récupérer les cellules dont la valeur est > à 0 et la couleur de fond blanc.

    Pourriez-vous me dire s'il existe une solution.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour.

    Je ne suis pas un grand spécialiste en VBA Excel et je m'efforce d'apprendre, c'est pour cela que reviens sur ce fil pour demander à nouveau votre concours, j'ai bien progressé dans ma procédure.

    Elle consiste à faire une boucle sur la plage "A1:E2" de la "Feuil1" de copier les cellules non verrouillées dont la valeur est > à 0 dans la Feuill2 en "A1:Ax".

    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 EcritCellsEnLigne_2()
    Dim i, Plage
    Set Plage = Range("A1:E2")
    Sheets(2).Cells.ClearContents
    x = 1
        Sheets(2).Cells.ClearContents
        For Each i In Plage
            If i.Locked = False And i.Value > 0 Then
                Sheets(2).Range("A" & x) = i
                x = x + 1
            End If
        Next i
        Sheets(2).Activate
    End Sub
    Si la plage "A1:E2" de la "Feuil1" contient 6 cellules non verrouillées dont la valeur est > à 0, ces cellules seront copiées dans la Feuill2 en "A1:A6".

    Comment modifier le code pour copier les cellules concernées dans la Feuill2 en "A1:F1".

    Merci d'avance pour votre aide.

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    essayes ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Range, Plage As Range
    Set Plage = Range("A1:E2")
    Sheets(2).Cells.ClearContents
    x = 0
    Sheets(2).Cells.ClearContents
    For Each i In Plage
      If i.Locked = False And i.Value > 0 Then
        x = x + 1
        Sheets(2).Cells(1, x) = i
      End If
    Next i
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour casefayere.

    Désolé je n'ai pas pu répondre plus tôt.

    Ta réponse est nette, il faut que j’utilise plus souvent "Cells" au lieu de "Range".

    Au final si le nombre de données est faible ce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim i As Range, Plage As Range
    Set Plage = Range("A1:E2")
    x = 0
        For Each i In Plage
                x = x + 1
                Sheets(2).Cells(1, x) = i
        Next i
    Peut remplacer celui-ci (précédent fil) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Tablo = Range("A1:E2")
    Dim x, y, Z
        Z = 0
        For x = 1 To 2 'nb lignes
            For y = 1 To 5 'nb colonnes
                Z = Z + 1
                Sheets(2).Cells(1, Z) = Tablo(x, y)
            Next y
        Next x
    Merci et excellente soirée.

    PS: peut-ont rouvrir un fil résolu pour une question complémentaire?

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir modus57,
    Si le nombre de données est faible (comme ta plage "A1:E2"), tu ne verras pas la différence de vitesse d'exécution mais c'est toujours bien d'apprendre à manier les variables tableau
    PS: peut-ont rouvrir un fil résolu pour une question complémentaire?
    Perso, je te conseille d'ouvrir une nouvelle discussion afin de ne pas surcharger les fils.

    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. [WD17] remplir une colonne sous condition
    Par alex1005 dans le forum WinDev
    Réponses: 3
    Dernier message: 13/07/2012, 12h32
  2. [JSP] Remplir un tableau avec condition
    Par d0n32 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/10/2011, 13h50
  3. Réponses: 9
    Dernier message: 10/12/2009, 20h03
  4. Récupération de donnée dans un tableau sous conditions
    Par Guillaume.guegan dans le forum Excel
    Réponses: 5
    Dernier message: 06/11/2008, 10h16
  5. remplissage tableau sous condition
    Par gauguin dans le forum C
    Réponses: 6
    Dernier message: 15/02/2007, 18h06

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