Somme si la selection dans une plage donné vb [Résolu/Fermé]

Signaler
Messages postés
88
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
7 janvier 2015
-
 gnioler -
Bonjour,





je suis a la recherche de la programation vba pour

faire une somme de cellules selectioner uniquement si ces cellules sont dans les colones d;e;f;g et les lignes 29 a 62

21 réponses

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Bonjour,
Et comment tu fait la sélection des cellules ?.
Où doit être le résultat ?
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Peut-être que cette solution te conviendras ?
Cliquer sur une cellule de la plage la colorie en rouge, recliquer dessus la remet à la couleur par défaut.
Le total des cellules rouge s'inscrit automatiquement en A1
A coller dans le code de la feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Dim cel As Range, Total As Single  
    If Target.Count > 1 Then Exit Sub  
    If Not Intersect(Target, [D29:G62]) Is Nothing Then  
        If Target.Interior.Color = vbRed Then  
            Target.Interior.ColorIndex = -4142  
        Else  
            Target.Interior.Color = vbRed  
        End If  
        Total = 0  
        For Each cel In [D29:G62]  
            If cel.Interior.Color = vbRed Then  
                Total = Total + cel.Value  
            End If  
        Next cel  
        [A1] = Total  
    End If  
End Sub

Il serait plus simple de mettre un formule en A1 mais suis pas fort en formule Excel et laisse ce soins à un autre intervenant.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Messages postés
88
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
7 janvier 2015
2
bonjour
je pense que la formule dont j'ai besoin est beaucoup plus courte car en fait
j'ai deja une macro de calcul complete sur plusieurs ligne, je veux juste avant tous ca inseré 3 ligne de macro pour dire si la selection que j'ai faite avec ma souris est dans la plage D29:G62 avec un minimum de 2 ligne et 4 colones alors j'execute tous le reste
j'ai essayer d'integrer

If Not Intersect(Target, [D29:G62]) Is Nothing Then
If Intersect(Target, [D29:G62]) Then
end if

mais j'ai du faire une erreur
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Je ne pense pas pouvoir faire cela en "trois lignes" si tu trouve tant mieux pour toi, mais si ça t'intéresse avec quelque lignes en plus...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Dim cel As Range, S() As String  
    If Not Intersect(Target, [D29:G62]) Is Nothing Then  
        If Target.Count < 8 Then Exit Sub 'Y a moins de 8 cellules sélectionnées  
        S = Split(Target.Address, ":")  
        If Target.Column <> 4 Or Range(S(1)).Column <> 7 Then Exit Sub 'pour avoir 4 colonnes ça doit commencer en D  et finir en G
        'ICI les conditions sont remplies  
        'et si tout le reste c'est la somme de ces cellules le plus simple c'est  
        [A1] = 0 'pour exemple en A1  
        For Each cel In Target  
            [A1] = [A1] + cel  
        Next cel  
    End If  
End Sub


A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
bonjour

merci beaucoup
et désolé mais 3 ligne était une expression je débute en VBA
faut pas m'en vouloir

j'essaye et je vous tient au courant
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
Bonjour tout le monde,

Lermitte, j'ai l'impression que tu ne testes pas si la sélection dépasse la ligne 62.

Autre proposition :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
    If Target.Column <> 4 Or Target.Columns.Count <> 4 Then Exit Sub  
    If Target.Row < 29 Or Target.Rows.Count < 2 Or Target.Row + Target.Rows.Count - 1 > 62 Then Exit Sub  
    ' ton programme  
    [A28] = Application.Sum(Target)
End Sub 

eric
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Salut Eric,
Exact, j'ai pas tester les limites row.
Mais j'ai mis
If Target.Count < 8 Then Exit Sub 'Y a moins de 8 cellules
pour éviter de faire les autre tests si cette conditions n'est pas remplie, une habitude de quand les PC étaient très lent..
Elle peut remplacer - Or Target.Rows.Count < 2
A+
PS: Je connaît aussi Rows.Count et .Columns.Count mais je ne sais pas ce qui s'est passé Excel n'a pas voulu les prendre.
Messages postés
88
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
7 janvier 2015
2
merci beaucoup

je viens d'essayer la formule de eric
mais ca ne marche pas car il me souligne la 2eme ligne

je ne comprend pas ce que veut dire la ligne
[A28]=application.sum(target)
et les numero utilisé dans la 2/3/ et 4eme ligne c'est le numero des colones et cellules mais si ma colonne D et E sont fusioné comment on les compte
Messages postés
88
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
7 janvier 2015
2
rebonjour a tous les 2 j'ai essayer vos 2 macro seule
ca ne marche pas
de plus quand je les écrit tel quel elle disparaisse je ne les trouve plus dans macro, afficher les macro, pourquoi?

merci pour vos reponse
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
Re,

ca ne marche pas
de plus quand je les écrit tel quel elle disparaisse je ne les trouve plus dans macro, afficher les macro, pourquoi?

Parce que tu ne fais pas bien, impossible de savoir sans être devant ton micro.

je ne comprend pas ce que veut dire la ligne
[A28]=application.sum(target)
met la somme d'une sélection valide en A28

un exemple fonctionnel :
http://www.cijoint.fr/cjlink.php?file=cj201110/cijEzfwE9y.xls
les fusions de cellules sont à éviter au maximum !!!!
Ici en l'occurence ça ne gène pas....

eric
Messages postés
88
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
7 janvier 2015
2
re

si si je suis devant mon micro
mais désolé je debute alors je ne comprend pas tout

l'exemple fonctionel ne s'ouvre pas le lien est bloqué

par contre pourquoi la macro disparait quand j'ecrit private devant et quand je l'enleve je la retrouve
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
cijoint.fr merdouille un peu parfois.
J'étais sur un autre micro et je ne peux pas l'uploader sur un autre site, re-essaie un peu plus tard.

par contre pourquoi la macro disparait quand j'ecrit private devant et quand je l'enleve je la retrouve
Tu sais que tu si tu mets ton curseur sur une instruction et que tu fais F1 tu as une excellente aide ?

eric
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
RE?
je crois que j'ai compris !!!
Dans Excel >> Tu tape Alt+F11
L'IDE de visual basic s'ouvre
A gauche tu à la fenêtre de l'explorateur de projet avec les noms de tes feuilles, si tu ne le trouve pas tu tape Ctrl+R
Tu double clic sur le nom de la feuille concernée.
Dans la fenêtre qui s'ouvre tu fais un copier/coller de la macro d'Eric
Tu ferme l'IDE (la croix rouge)
Et GO... tu test
Et oublie pas de sauver Excel
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
ok merci je vous tient au courant
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Pour réactualiser, tu à lu mon poste précédant pendant que je le modifiait.
Et j'ajouterais .. TU NE FAIT RIEN D'AUTRE
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
comment fait on pour l'executer une fois que j'ai selectioner mes cellules avec la souris
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Rien, c'est automatique
Tu devrais avoir le total des cellules sélectionnées dans la cellule A28
ha ok
je vais essayer
par contre il me le faut pas en automatique car j'ai crée un bouton pour cliquer dessus

qu'est ce qu'il faut que j'enleve dans la formule pour qu'il ne soit pas automatique
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
essaie avec ça (non testé mais ça ne devrait pas être trop loin...)
Sub sumSel() 
    If Selection.Column <> 4 Or Selection.Columns.Count <> 4 Then Exit Sub   
    If Selection.Row < 29 Or Selection.Rows.Count < 2 Or Selection.Row + Selection.Rows.Count - 1 > 62 Then Exit Sub   
    ' ton programme   
    [A28] = Application.Sum(Selection) 
End Sub

eric
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 149
Y a quoi dans le code de ton bouton ?
Montre le code
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
ca y est ca marche
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
oui, à mettre au début pour sortir de la macro si selection incorrecte.
eric
Messages postés
23901
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
28 février 2021
6 671
évite de modifier les messages après une réponse, sinon on ne comprend plus... ;-)
merci beaucoup