[VBA] appliquer plusieurs contraintes et instructions
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 32

[VBA] appliquer plusieurs contraintes et instructions



  1. #1
    -maroon-

    [VBA] appliquer plusieurs contraintes et instructions


    ------

    Bonjour,

    J'ai un problème concernant l'application d'une instruction sur une nouvelle ligne qui est elle-même crée sous condition.

    Pour l'instant j'ai le code suivant mais il y a un bug et je comprends pas pourquoi.
    Code:
        Sub séparer_EA()
        Dim zz As Integer, x As Integer
        zz = [A65000].End(xlUp).Row
        x = 1
        For i = zz To 2 Step -1 ###Comparer les cellules de la colonne B 2 à 2 et insérer une ligne vierge quand les valeurs sont différentes###
            If Cells(i, "B").Value <> Cells(i - 1, "B").Value Then
            Rows(i).Insert
            End If
        Next i
        End Sub 
    
        Sub sum()
        While Cells(i - x, "B").Value = Cells(i - 2, "B").Value ###Ici je veux additionner les cellules de la colonne C au-dessus de la nouvelle ligne créée tant que la valeur des cellules correspondantes de la colonne B reste la même###
            Cells(i, "C").Formula = sum(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value)) ###Addition des cellules i-1,"C" à (i-x),"C". La valeur de x dépends du nombre de cellule B qui ont la même valeur.###
            Wend
        End Sub

    -----

  2. #2
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Code:
        Sub sum()  ' sum est une fonction donc un mot-clé donc interdit ici
        While Cells(i - x, "B").Value = Cells(i - 2, "B").Value ' X est une variable qui aurait dû être initialisée préalablement

  3. #3
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Bonjour et merci pour votre réponse!

    Mais pourquoi j'ai un message d'erreur me disant "sub ou function non défini " lorsque je ne marque pas "sub sum()"? Je pensais qu'il fallait introduire les fonctions avant de les utiliser...

  4. #4
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    Bonjour et merci pour votre réponse!

    Mais pourquoi j'ai un message d'erreur me disant "sub ou function non défini " lorsque je ne marque pas "sub sum()"? Je pensais qu'il fallait introduire les fonctions avant de les utiliser...
    essaie avec sub somme()

  5. A voir en vidéo sur Futura
  6. #5
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    J'ai toujours un problème avec comme message "sub ou function non définie"!!

    Code:
    Sub séparer_EA()
    Dim zz As Integer
    zz = [A65000].End(xlUp).Row
    For i = zz To 2 Step -1
      If Cells(i, "B").Value <> Cells(i - 1, "B").Value Then
        Rows(i).Insert
      End If
    Next i
    End Sub
    Sub somme()
    Dim x As Integer
    x = 1
    While Cells(i - x, "B").Value = Cells(i - 2, "B").Value
        Cells(i, "C").Formula = sum(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value))
    Wend
    End Sub

  7. #6
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    J'ai toujours un problème avec comme message "sub ou function non définie"!!
    Ça bloque sur quelle ligne de code ?

  8. #7
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Quand tu démarres la macro chaque Sub, quelle ligne est sélectionnée dans la feuille de données ?

  9. #8
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    En fait la première partie permet de parcourir la colonne B du tableau et d'insérer une ligne vierge sur toute la longueur du tableau à chaque fois que deux valeurs sont différentes. Par exemple si B13 différent de B14 alors insérer une ligne entre B13 et B14.

    J'aimerais que la deuxième partie se réalise en même temps et donc que lorsqu'une ligne est créée alors la somme des cellules de la colonne C soit calculée et entrée dans la cellule "Ci" de la nouvelle ligne.

  10. #9
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    En fait la première partie permet de parcourir la colonne B du tableau et d'insérer une ligne vierge sur toute la longueur du tableau à chaque fois que deux valeurs sont différentes. Par exemple si B13 différent de B14 alors insérer une ligne entre B13 et B14.

    J'aimerais que la deuxième partie se réalise en même temps et donc que lorsqu'une ligne est créée alors la somme des cellules de la colonne C soit calculée et entrée dans la cellule "Ci" de la nouvelle ligne.
    Tu ne réponds pas à mes questions donc impossible de t'aider !

  11. #10
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    La macro commence la comparaison des cellules à partir de la dernière ligne. Donc arrivé à B14, si B13 est différent alors une ligne est insérée au-dessus de B14

  12. #11
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Et la ligne Sub somme () est surlignée en jaune avec comme message "sub ou function non définie"!

  13. #12
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    Et la ligne Sub somme () est surlignée en jaune avec comme message "sub ou function non définie"!
    Et à ce moment là, quelle ligne de données est sélectionnée ?

  14. #13
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Aucune je pense puisque la macro s'arrête au niveau de la compilation. Si une ligne ou une colonne est sélectionnée avant il ne se passe rien la même ligne reste sélectionnée et aucune action ne se passe.
    Par contre quand je retire le bloc Sub somme() alors la macro fonctionne et des lignes vides sont insérées dans tout le tableau entre les cellules de la colonne B ayant des valeurs différentes.
    Sauf que j'aimerais pouvoir faire fonctionner la deuxième instruction en même temps: c-à-d création de ligne + calcul et inscription dans la cellule

  15. #14
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    Aucune je pense puisque la macro s'arrête au niveau de la compilation.
    Il est impossible qu'aucune ligne ne soit sélectionnée.
    Vu que tu ne réponds pas à des questions pourtant simples, je renonce.

  16. #15
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Désolé je suis plus que débutant donc j'ai peut-être pas compris la question.
    En fait je me suis trompé la macro que j'ai envoyé en PJ fonctionne mais uniquement pour la première parti c-à-d l'insertion des lignes. Mais la deuxième partie de la macro ne fonctionne pas. D'ailleurs quand je fais le débogage pas à pas, le curseur s'arrête à "Next i" et recommence la boucle à chaque fois sans passer au deuxième bloc.

  17. #16
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    En fait quand tu parles de ligne c'est dans le tableau de données ou dans le code de la macro? Je suppose que c'est la macro? Alors c'est à "Next i " que ça s'arrête et ça recommence la boucle de "For".

  18. #17
    fregoli

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Tu définis ta fonction somme sans paramètre, et ensuite tu l'appelles avec 2 paramètres.
    Il faut garder une définition cohérente qui colle avec l'appel:

    Code:
    Function somme(X as integer, Y as integer) as string
    Dim x As Integer
    x = 1
    While Cells(i - x, "B").Value = Cells(i - 2, "B").Value
        Cells(i, "C").Formula = sum(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value))
    Wend
    End Function
    Dernière modification par fregoli ; 04/05/2016 à 08h19.
    Une allumette peut aussi faire déborder le vase...

  19. #18
    fregoli

    Re : [VBA] appliquer plusieurs contraintes et instructions

    NB: il reste encore plein d'erreur qui sont d'un autre ordre: utilisation de Range, Cells, ...

    De plus tu utilises sum(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value)) et il faudrait

    somme(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value))

    puisque ta fonction s'appelle maintenant SOMME

    et tu ne pourras pas boucler sur les valeurs avec cette écriture
    Dernière modification par fregoli ; 04/05/2016 à 08h24.
    Une allumette peut aussi faire déborder le vase...

  20. #19
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Merci beaucoup pour ta réponse!! Je savais pas pour les variables de la fonction somme! Je revois le code et j'enverrai la version finale

  21. #20
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Bonjour!

    décidément je n'arrive pas à m'en sortir! J'ai toujours un problème pour la comparaison des cellules.

    J'ai trié les lignes de mon tableau en classant les valeurs de la colonne G par ordre croissant. Il y a plusieurs lignes pour lesquelles la valeur de G est identique ( donc il y a un groupe de ligne pour chaque valeur différente de G) . Et en fait il faut que j'applique des calculs sur chaque groupe de ligne et copier les résultats dans une nouvelle feuille excel.

    Est-ce que quelqu'un peut me donner une indication dans les fonctions à utiliser et leur enchainement.

    J'ai essayé avec différentes fonctions (while, if ) mais je pense que j'ai un problème au niveau de la variable qui permet de passer au groupe de ligne suivant. Et surtout comment dire de copier la nouvelle valeur de chaque calcul dans une cellule différente ou une nouvelle ligne

    Code:
    Sub macro()
    Dim bdd As Integer 'je déclare la variable qui correspond à chaque cellule de la colonne G
    Static a As Long
    Dim feuille As Worksheet 'object qui correspondra à la nouvelle feuille
    surface = 0
    bdd = Range("B2").End(xlUp).Row
    
    Set feuille = Sheets.Add
    feuille.Name = "selection" & a 'créer la nouvelle feuille et renommer
    
    Sheets("feuil1").Select 'selectionner la feuille contenant le tableau
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("B2") 'trier les cellules de a colonne B à partir de B2
    
    For i = bdd To 2 Step -1
    While Cells(i, "B").Value = Cells(i - 1, "B")
    surface = surface + Cells(i, "D").Value
    
    Sheets("selection" & a).Cells(1, "A").Value = surface 'exemple d'opération : somme des valeurs de la colonne D pour les ligne avec la même valeur de G
    Wend
    Next i
    
    End Sub

    c'est très compliqué mais j'aimerais avoir au moins des indications ou des conseils sinon je ne vais pas m'en sortir!

  22. #21
    -maroon-

    Exclamation Re : [VBA] appliquer plusieurs contraintes et instructions

    Rebonjour,

    J'ai revu mon code mais il y a toujours un problème. En fait lorsque que lorsque j'utilise la fonction somme que les valeurs des sommes des cellules précédentes soient conservées jusqu'à ce que la condition ne soit plus respectée.

    Code:
    Sub macro1()
        Dim ligne As Integer
        Dim Sum As Long
        Dim feuille As Worksheet
     
        Sum = 0
        ligne = 2 'les données démarrent à partir de la seconde ligne
    
    Range("B2").Select 'je trie les données
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("B2")
     
        Do While Cells(ligne, 2).Value <> Null 'données à comparées en colonne 2
    
            If Cells(ligne, 2).Value = Cells(ligne + 1, 2) Then
    
                Sum = Sum + Cells(ligne, 4).Value
            End If
    
            ligne = ligne + 1
    
        Loop
    
        'je mets les résultats dans un autre onglet
    Set feuille = Sheets.Add
    feuille.Name = "selection" & a
    Worksheets("selection" & a).Cells(1, 1).Value = Sum
    
    End Sub

  23. #22
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Vu que tu ne tiens pas compte des conseils donnés, tu n'es pas prêt de t'en sortir.
    Sum est un mot-clé donc à ne pas utiliser en temps que nom de variable.
    Une règle simple pour éviter ce genre de problème : utiliser des noms de variables en français sans homonyme en Anglais (somme, total ...)

  24. #23
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Bonjour,
    Merci pour ta réponse!

    Oui j'ai réécris le code tellement de fois que j'ai fini par refaire la faute. Mais ça ne marche toujours pas!! Je pense que mon problème c'est arriver à conserver une valeur dans une variable.
    Dans la variable "somme " par exemple, si la condition est vérifiée alors on a "somme = 0 + x1 " ensuite cette valeur est conservée, et si à la prochaine ligne la condition est encore vérifiée alors on a "somme = 0 + x1 + x2" etc...

    J'ai encore beaucoup de choses à revoir dans le code mais je pense que c'est mon problème principal!

  25. #24
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    Bonjour,
    Merci pour ta réponse!

    Oui j'ai réécris le code tellement de fois que j'ai fini par refaire la faute. Mais ça ne marche toujours pas!! Je pense que mon problème c'est arriver à conserver une valeur dans une variable.
    Dans la variable "somme " par exemple, si la condition est vérifiée alors on a "somme = 0 + x1 " ensuite cette valeur est conservée, et si à la prochaine ligne la condition est encore vérifiée alors on a "somme = 0 + x1 + x2"
    Et tu veux quoi ? Conserver à la fois "somme = 0 + x1 " et "somme = 0 + x1 + x2" ?

  26. #25
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Non en fait je conserver une seule valeur qui intègre la nouvelle à chaque fois. Donc si somme= 0 au début et qu'ensuite les conditions sont respectées pour la cellule C2=3 par exemple alors somme=3, ensuite si c'est respecté pour la cellule C3=7 alors somme=10 etc...
    une fois qu'on arrive sur une ligne de C qui ne respecte pas alors la valeur totale de "somme" est copiée dans une cellule; mais ça c'est mon prochain problème!!

    Pour l'instant j'aimerais savoir comment créer une telle variable dans une boucle qui va vérifier cellule après cellule la colonne C. Ou plutôt la colonne B car en fait la valeur de i,C est additionnée tant que la valeur de i, D est égale à la valeur de i-1,D. (la colonne D étant classée en ordre).

  27. #26
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Redonne le code actuellement utilisé. Si tu as remplacé sum par un autre nom, la boucle while et la condition if doivent fonctionner.
    J'ai un doute sur le test Cells(ligne, 2).Value <> Null ?
    Pour lever ce doute, arrange-toi pour que la cellule A1 contienne Null comme résultat d'une fonction et mets ceci dans la macro :
    msgbox range("A1").value
    Si ça renvoie Null sans guillemet, c'est bon, sinon ton test ne marche pas.
    Dernière modification par cherbe ; 05/05/2016 à 13h23.

  28. #27
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Oui effectivement il y a un début!! Merci!!
    Pour l'instant j'obtiens la valeur 1 dans la cellule A1 de la feuille créer.
    Mais la dernière partie pour copier les résultat car pour l'instant elle ne fait pas partie de la boucle et une seule valeur est copiée. J'ai retiré le do while mais je pense qu'il faut que je l'utilise quelque part pour qu'un nouveau résultat soit généré quand on passe à une nouvelle condition.


    Code:
    Sub macro1()
        Dim ligne As Integer
        Dim Somme As Long
        Dim feuille As Worksheet
     derlig = Range("A" & Rows.Count).End(xlUp).Row
     dercol = Range("A" & Cells.Columns.Count).End(xlToLeft).Column
        Somme = 0
        ligne = 2 'les données démarrent à partir de la seconde ligne
    
    Range("B2").Select 'je trie les données J'essaye de refaire cette partie car le tri n'est pas étendu au tableau
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("B2")
    
    If Cells(ligne, 2).Value = Cells(ligne + 1, 2) Then
     
                    Somme = Somme + Cells(ligne, 4).Value
        ligne = ligne + 1
    
                End If
    
        'je mets les résultats dans un autre onglet Pour le moment je fais appel à une seul cellule 
    Set feuille = Sheets.Add
    feuille.Name = "selection"
    Worksheets("selection").Cells(1, 1).Value = Somme
    
    End Sub

  29. #28
    -maroon-

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Par contre je n'avais pas déclaré derlig et dercol. Le code tente de recréer un onglet alors qu'il devrait seulement refaire la boucle avec une nouvelle condition pour les cellules suivantes.

    Code:
    Option Explicit
    Sub macro1()
        Dim ligne As Integer
        Dim Somme As Long
        Dim feuille As Worksheet
        Dim derlig As Integer
        Dim dercol As Integer
    derlig = Range("A" & Rows.Count).End(xlUp).Row
    dercol = Range("A" & Cells.Columns.Count).End(xlToLeft).Column
        Somme = 0
        ligne = 2 'les données démarrent à partir de la seconde ligne
    
    Range("B2").Select 'je trie les données. J'essaye de refaire cette partie car le tri n'est pas étendu au tableau
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("B2")
    
    If Cells(ligne, 2).Value = Cells(ligne + 1, 2) Then
     
                    Somme = Somme + Cells(ligne, 4).Value
        ligne = ligne + 1
    
                End If
    
        'je mets les résultats dans un autre onglet Pour le moment je fais appel à une seul cellule 
    Set feuille = Sheets.Add
    feuille.Name = "selection"
    Worksheets("selection").Cells(1, 1).Value = Somme
    
    End Sub

  30. #29
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    J'ai retiré le do while mais je pense qu'il faut que je l'utilise
    Il ne fallait par la retirer mais modifier le test. Ce While va fonctionner tant qu'il ne rencontre pas de cellule vide :
    Code:
    Do While Cells(ligne, 2).Value <>""

  31. #30
    cherbe

    Re : [VBA] appliquer plusieurs contraintes et instructions

    Citation Envoyé par -maroon- Voir le message
    Le code tente de recréer un onglet
    avec Set feuille = Sheets.Add, c'est normal !
    Citation Envoyé par -maroon- Voir le message
    alors qu'il devrait seulement refaire la boucle.
    Quelle boucle ?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Instructions string
    Par invitee6712f08 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 14/05/2011, 10h55
  2. Instructions privilégiées
    Par Ravaner dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 22/10/2010, 10h08
  3. Instructions AT ELZ50
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 3
    Dernier message: 03/05/2008, 09h40
  4. VBA Excel: appliquer une macro a plusieurs fichiers
    Par inviteb73ce398 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 14/03/2007, 09h45
  5. instructions??
    Par invite9b9d0eb8 dans le forum Électronique
    Réponses: 3
    Dernier message: 16/11/2006, 14h36