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 :

Problème de boucle pour affectation des données d'un tableau sur un 2ème tableau.


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut Problème de boucle pour affectation des données d'un tableau sur un 2ème tableau.
    Bonjour à tous et à toutes!
    J'explique mon problème:
    J'ai un premier tableau tout simple à trois colonnes (client, type de déchets, quantité). Ce que je voudrais c'est que lorsque je clique sur le bouton "lancer l'exécution", un deuxième tableau se remplisse en fonction du contenu du premier tableau de la façon suivante:
    La première case de ce deuxième tableau = à la quantité de la première ligne "fûts de ferrailles" du premier tableau, la deuxième case=1, la troisième case = quantité de la deuxième ligne "fûts de ferrailles" moins la quantité de la première ligne "fûts de ferrailles", la quatrième case=1, la cinquième case = quantité de la troisième ligne "fûts de ferrailles" moins la quantité de la deuxième ligne "fûts de ferrailles", la sixième case=1 etc etc...
    J'aimerais que le deuxième tableau ne s'occupe que des lignes "fûts de ferrailles" et se remplisse suivant le modèle que je viens de décrire quelque soit le nombre de lignes "fûts de ferrailles" de mon premier tableau.
    J'ai écrit un code qui fonctionne bien lorsque je remplis le premier tableau avec la liste 2 mais ça ne fonctionne plus lorsque je le remplit avec la liste 1. De plus, mon code ne traite que 3 lignes "Fûts de ferrailles" alors que j'aimerais qu'il traite autant de lignes que nécessaire (je n'arrive pas à adapter une boucle correcte à mon code).
    J'espère avoir été clair dans mes explications...
    Je joins mon fichier.
    Merci beaucoup si vous pouvez m'aider parce que là je sèche depuis plusieurs jours et je commence à en avoir marre!
    MERCI!!!
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour

    Ce code utilise une boucle for

    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
    Dim i As Long
    Dim Colonne As Integer
     
    Colonne = 6
     
    For i = 16 To 44 Step 2
     
        If Cells(i, 2).Value = "Fûts de ferrailles" Then
            If i > 16 Then
                Cells(15, Colonne).Value = Cells(i, 3).Value - Cells(i - 2, 3).Value
            Else
                Cells(15, Colonne).Value = Cells(i, 3).Value
            End If
            Colonne = Colonne + 1
            Cells(15, Colonne).Value = 1
            Colonne = Colonne + 1
        End If
     
    Next i

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bonjour Jérôme!
    Merci d'avoir répondu aussi rapidement à mon message!
    Le code que tu m'as envoyé ne répond pas exactement à ce que je cherche obtenir donc je pense que je me suis pas bien exprimé.
    En prenant pour exemple la liste 1, je dois obtenir dans le tableau à remplir:
    1ère case: 12 (=1ère quantité fûts de ferrailles)
    2ème case: 1
    3ème case: 8 (=2ème quantité fûts de ferrailles-1ère quantité fûts de ferrailles)
    4ème case: 1
    5ème case: 6 (=3ème quantité fûts de ferrailles-2ème quantité fûts de ferrailles)
    6ème case:1
    7ème case:4 (=4ème quantité fûts de ferrailles-3ème quantité fûts de ferrailles)
    8ème case:1

    J'espère avoir été un peu plus clair.
    Je te remercie beaucoup de bien vouloir m'aider.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Pour faire cela, il suffit d'adapter le code pour qu'il recherche dans liste 1 et non dans tableau 1

    NB : dans ton fichier exemple tu recherches dans Tableau 1


    EDIT : Avec le code c'est mieux

    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
    Dim i As Long
    Dim Colonne As Integer
    Dim IntPrec As Integer
     
    IntPrec = 0
    Colonne = 6
     
    For i = 24 To 36 Step 2
     
        If Cells(i, 9).Value = "Fûts de ferrailles" Then
            Cells(15, Colonne).Value = Cells(i, 10).Value - IntPrec
            IntPrec = Cells(i, 10).Value
            Colonne = Colonne + 1
            Cells(15, Colonne).Value = 1
            Colonne = Colonne + 1
        End If
     
    Next i

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse Jérôme!
    C'est exactement ce que je voulais. Je te remercie beaucoup!

    Maintenant j'ai un dernier petit souci que j'arrive pas a résoudre et ça serait vraiment sympa si toi ou quelqu'un d'autre pouvait m'aider:

    En prenant pour exemple la liste 1, je dois obtenir dans le tableau à remplir:
    1ère case: 12 (=1ère quantité fûts de ferrailles)
    2ème case: 1
    3ème case: 20-12=8 (=2ème quantité fûts de ferrailles-1ère quantité fûts de ferrailles)
    4ème case: 1
    5ème case: 26-20-12=-6 (=3ème quantité fûts de ferrailles-2ème quantité fûts de ferrailles-1ère quantité fûts de ferrailles)
    6ème case:1
    7ème case: 30-26-20-12=-28 (=4ème quantité fûts de ferrailles-3ème quantité fûts de ferrailles-2ème quantité fûts de ferrailles-1ère quantité fûts de ferrailles)
    8ème case:1
    etc etc..

    J'aurais besoin d'un code similaire au précédent afin de pouvoir traiter autant de lignes "Fûts de ferrailles" que nécessaire.

    MERCI BEAUCOUP POUR VOTRE AIDE!!!

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila

    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
    Dim i As Long
    Dim Colonne As Integer
     
    Colonne = 6
     
    For i = 24 To 36 Step 2
     
        If Cells(i, 9).Value = "Fûts de ferrailles" Then
            If Colonne = 6 Then
                Cells(15, Colonne).FormulaLocal = "=" & Cells(i, 10).Value
            Else
                Cells(15, Colonne).FormulaLocal = "=" & Cells(i, 10).Value & "-" & Mid(Cells(15, Colonne - 2).FormulaLocal, 2)
            End If
            Colonne = Colonne + 1
            Cells(15, Colonne).Value = 1
            Colonne = Colonne + 1
        End If
     
    Next i

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup Jérôme!
    C'est exactement ce que je voulais!
    Merci beaucoup pour ton aide!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/04/2015, 22h18
  2. Réponses: 0
    Dernier message: 11/06/2014, 22h33
  3. [Débutant] Boucle pour lire des données diffèrentes
    Par sid85 dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/06/2011, 17h46
  4. Boucle pour récupérer des données
    Par bbell dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/12/2008, 12h42
  5. Réponses: 3
    Dernier message: 11/01/2006, 17h44

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