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 :

Boucler sur les cellules de droites de la ligne active [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut Boucler sur les cellules de droites de la ligne active
    Bonjour à tous !

    Voici donc mon petit bout de code servant à calculer les totaux d'un tableaux :

    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
    Public Sub CalculTotaux()
        Dim i As Long
     
        With Workbooks(NOMFIC).Worksheets(FEUPRP)
            .Range("C" & .Cells(Rows.Count, 3).End(xlUp).Row + 1).Select
     
            Selection.Value = "Total"
            RESEXE.X = ActiveCell.Row
            RESEXE.Y = 4
     
     
    For i = 0 To 5
                .Cells(ActiveCell.Column & RESEXE.X).End(xlDown).Select
                ActiveCell = Application.Sum(.Cells(13, RESEXE.Y), .Cells(RESEXE.X, RESEXE.Y))
                RESEXE.Y = RESEXE.Y + 1
            Next i
     
        End With
    End Sub
    J'arrive à me placer sur la bonne ligne et à donner la valeur qui servira de nom (Total), mais je n'arrive pas à bouclé sur la cellule à droite de la cellule active pour rentrer les valeurs en utilisant la fonction de SOMME (pour i de 0 à 5).

    Au passage je veux bien une vérif de mon utilisation de Somme parce que je ne suis pas sur d'utiliser la formule excel ms plutot une fonction ??!

    Juste pr illustrer (c'est rudimentaire^^) :

    ____A______B______C_____D______E_______F
    1_Texte1___2______4______6______8______10
    2_Texte1___2______4______6______8______10
    3_Texte1___2______4______6______8______10
    4_Texte1___2______4______6______8______10
    5__Total ___8_____16_____24_____32_____40

    J'aimerais obtenir la ligne 5, sachant que moi j'arrive à écrire le total de la cellule A5, mais je n'arrive ps à boucler sur ma ligne pr remplir B5,C5,etc...

    Merci pour tout,

    Peace

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    une proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Workbooks(NOMFIC).Worksheets(FEUPRP)
        NewLig = .Cells(Rows.Count, "C").End(xlUp).Row + 1
        LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        .Range("C" & NewLig).Value = "Total"
        .Cells(NewLig, 4).FormulaR1C1 = "=Sum(R[" & 2 - NewLig & "]C:R[-1]C)"
        .Cells(NewLig, 4).AutoFill .Range(.Cells(NewLig, 4), .Cells(NewLig, LastCol))
    End With
    Edit: ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub CalculTotaux()
    Dim NewLig As Long
    Dim LastCol As Integer, Deb As Integer
     
    Deb = 1     'Première ligne du tableau (ligne des titre)
    With Workbooks(NOMFIC).Worksheets(FEUPRP)
        LastCol = .Cells(Deb, .Columns.Count).End(xlToLeft).Column
        NewLig = .Cells(Rows.Count, "C").End(xlUp).Row + 1
        .Range("C" & NewLig).Value = "Total"
        .Range(.Cells(NewLig, 4), .Cells(NewLig, LastCol)).FormulaR1C1 = "=Sum(R[" & Deb - NewLig + 1 & "]C:R[-1]C)"
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'Etudes Statistiques
    Inscrit en
    Novembre 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'Etudes Statistiques
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2010
    Messages : 79
    Points : 98
    Points
    98
    Par défaut
    si j'ai bien compris ta demande, ce code fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Public Sub CalculTotaux()
        Dim i As Integer
        Dim nbLigne As Integer
        nbLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
        ActiveWorkbook.Worksheets("Feuil5").Range("A" & .Cells(Rows.Count, 3).End(xlUp).Row + 1).Select
        If Selection.Value = "" Then
            Selection.Value = "Total"
            For i = 2 To 5
                ActiveCell(1, i).Value = WorksheetFunction.Sum(Range(Cells(1, i), Cells(nbLigne, i)))
            Next i
        End If
    End Sub

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Bonjour et merci pour cette réponse rapide !!!

    Donc, pour mercatog : tu déclare Newlig et LastCol en Range ? parce que ça me renvoie une erreur : "Variable objet ou variable de bloc with non définie".

    Et pour aliasjadawin : ton code fonctionne pour le fait de passer sur toutes les cellules de ma ligne, le problème c'est qu'il me renvoie pas du tout la somme de mes colonnes comme total :/ J'ai adapté ton code à mon appli ms il me renvoie des chiffres qui viennent de je ne sais où !!!

    Je continu de chercher le problème bien évidemment ^^

    Peace

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pourquoi des range?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NewLig As Long
    Dim LastCol As Integer, Deb As Integer
    J'avais proposé un code modifié, l'as tu essayé?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Je reviens sur ce que j'ai dit, j'ai enfin compris d'où venaient ces nombres incompréhensible que je recevais !^^ Il débutait la somme sur les colonnes du début, donc tout était décalé, et puis du coup il récupérait dans la somme les totaux des premières colonnes ou le total était déjà inscrit !!

    J'espère ne pas être trop flou ! En tout cas c'est bon, mon problème est résolu, et ton code fonctionne parfaitement aliasjadawin !!

    Juste pour que tu voye, voici moncode après adaptation :

    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
    Public Sub CalculTotaux()
        Dim i As Integer
        Dim ct_nbrlig As Integer
        Dim ct_nbrcol As Integer
        ct_nbrlig = Range("C" & Rows.Count).End(xlUp).Row + 1
        ct_nbrcol = 4
     
        With Workbooks(NOMFIC).Worksheets(FEUPRP)
     
            .Range("C" & .Cells(Rows.Count, 3).End(xlUp).Row + 1).Select
            If Selection.Value = "" Then
                Selection.Value = "Total"
                For i = 2 To 6
                    ActiveCell(1, i).Value = WorksheetFunction.Sum(Range(Cells(13, ct_nbrcol), Cells(ct_nbrlig - 1, ct_nbrcol)))
                    ct_nbrcol = ct_nbrcol + 1
                Next i
            End If
        End With
    End Sub

    Par contre, j'aimerais (si possible^^) avoir ta réponse mercatog sur le type de variable, et je ne comprens pas très bien les lignes suivantes, donc si je peux avoir un tout petit peu d'explication :$ Merci !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Cells(NewLig, 4).FormulaR1C1 = "=Sum(R[" & 2 - NewLig & "]C:R[-1]C)"
        .Cells(NewLig, 4).AutoFill .Range(.Cells(NewLig, 4), .Cells(NewLig, LastCol))
    Surtout le Sum de la première ligne, et la deuxième ligne je ne vois pas vraiment ce qu'elle fait :/

    Merci pour votre aide en tout cas

    Bon week end !

    Peace

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Merci pour ta réponse mercatog !!

    Tout d'abord, je t'avou que je ne comprends pas pourquoi j'ai voulu les déclarer en Range, j'ai du aller un peu trop vite :/

    Sinon je n'avais pas vu le édit, donc je test maintenant et je te dit ça !

    Un grand MERCI !

    Peace

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Bon alors : tes deux bouts de code fonctionne, et d'ailleurs je ne vois pas comment ça se passe sans boucler sur mes cellules !

    Et en fait, il y a juste un souci : ça me colle le total pour les 3 premières colonnes mais ça ne me colle pas les 2 dernières ! Et comme je comprends pas encore trop, je vois pas ou effectuer ma modification pour que ça marche !

    Je pense que ton code est plus rapide, du fait qu'il ne passe pas dans une boucle, mais j'aimerais ne pas trop m'avancer ??

    Merci

    Peace

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sans une adaptation rigoureuse à ton fichier réel, tu auras des résultats plus au moins archaiques.
    J'avais supposé que ton tableau commence en C1 (en réalité en C Deb)et se termine ailleurs
    J'avais supposé que la première ligne du tableau (Ligne Deb) contient les titres de tes colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastCol = .Cells(Deb, .Columns.Count).End(xlToLeft).Column
    détermine la colonne de la dernière cellule remplie de la ligne Deb
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Salut !

    Bon et bien c'est bon, j'ai réussi en modifiant la variable deb, ou je lui donne ma dernière colonne (8) !!

    Toutefois, pourrait me dire ce que représente textuellement cette ligne de code ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=Sum(R[" & 2 - NewLig & "]C:R[-1]C)"
    Je pense que le r représente "row", dc la ligne, et le c signifie "column", mais je n'en suis pas certain ! Et je vois pas comment leur sont attribuer les valeurs, surtout au niveau : Merci d'avance,

    Peace

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Pour explication, supposons que:
    Deb=13: Première ligne du tableau de donnée (ligne des titres)
    LastCol=7 N° de colonne de la dernière cellule remplie de la ligne Deb
    NewLig=20 Ligne Total
    Le code suivant sera donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(NewLig, 4), .Cells(NewLig, LastCol)).FormulaR1C1 = "=Sum(R[" & Deb - NewLig + 1 & "]C:R[-1]C)"
    Après remplacement des valeurs des variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(20, 4), .Cells(20, 7)).FormulaR1C1 = "=Sum(R[-6]C:R[-1]C)"
    Qui est équivalent[code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("D20:G20").FormulaR1C1 = "=Sum(R[-6]C:R[-1]C)"
    R[a]C[b]: Signifie décalage de a lignes et b colonnes [a et b positives (après) ou négatives(avant)]

    C'est à dire, on inscrit dans les formules
    D20=Sum(D14: D19)
    E20=Sum(E14:E19)
    ...
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Points : 58
    Points
    58
    Par défaut
    Un grand merci pour ces explications mercatog !!!

    J'avais compris pour la mise en place du range, mais j'avou que c'était le flou total en ce qui concerne la formation de la formule :S

    Mais là du coup je comprends bien mieux, et c'est plutôt apréciable

    Encore merci !!

    Peace

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

Discussions similaires

  1. [Débutant] Boucler sur les cellules d'un fichier Excel (VB NET)
    Par intimed dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/03/2012, 11h55
  2. [VBA/Excel] Boucler sur les colonnes
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/02/2007, 08h42
  3. Boucler sur les numero champs
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 30/08/2006, 06h29
  4. [VB.NET] Boucler sur les checkbox de mon formulaire
    Par malhivertman1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/08/2006, 10h51
  5. [NTFS]explication sur les type de droits
    Par arnolem dans le forum Sécurité
    Réponses: 6
    Dernier message: 19/04/2006, 12h52

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