[Excel] [VBA] somme de cellules voisines
Fermé
Kostorm
-
3 mars 2010 à 09:49
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 3 mars 2010 à 16:01
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 3 mars 2010 à 16:01
A voir également:
- [Excel] [VBA] somme de cellules voisines
- Formule somme excel colonne - Guide
- Liste déroulante excel - Guide
- Verrouiller cellules excel - Guide
- Somme si couleur excel - Guide
- Excel cellule couleur si condition texte - Guide
14 réponses
Du coup voilà mon code final pour ceux que ça interesse:
Sub SommeCouleurBleuclair()
Dim Cellule As Range
Dim total As Variant
For Each Cellule In Range("A1:A100") 'Plage de données à regarder
cellulevoisine = Cellule(1, 2)
If Cellule.Interior.ColorIndex = 41 Then '41 est le code couleur du bleu clair
If IsNumeric(cellulevoisine) Then total = total + cellulevoisine 'on additionne toutes les cellules voisine des cellules bleu clair
End If
Next
Range("G3") = total ' on affiche le resultat où on veut
End Sub
Sub SommeCouleurBleuclair()
Dim Cellule As Range
Dim total As Variant
For Each Cellule In Range("A1:A100") 'Plage de données à regarder
cellulevoisine = Cellule(1, 2)
If Cellule.Interior.ColorIndex = 41 Then '41 est le code couleur du bleu clair
If IsNumeric(cellulevoisine) Then total = total + cellulevoisine 'on additionne toutes les cellules voisine des cellules bleu clair
End If
Next
Range("G3") = total ' on affiche le resultat où on veut
End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
3 mars 2010 à 09:56
3 mars 2010 à 09:56
Salut,
Je ne vais pas retaper tout ton code, mais juste t'indiquer ce que tu as besoin.
Pour "voisiner" autour d'une cellule excel par VBA, il existe : Offset(ligne, colonne)
Sa syntaxe est facile :
A partir de la cellule active (celle que tu as sélectionné au préalable) :
Tu peux même combiner les 2 déplacements ex :
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
Je ne vais pas retaper tout ton code, mais juste t'indiquer ce que tu as besoin.
Pour "voisiner" autour d'une cellule excel par VBA, il existe : Offset(ligne, colonne)
Sa syntaxe est facile :
A partir de la cellule active (celle que tu as sélectionné au préalable) :
ActiveCell.Offset(1, 0): te renvoie la cellule située 1 ligne au dessous de celle qui est active
ActiveCell.Offset(-1, 0): te renvoie la cellule située 1 ligne au dessus de celle qui est active
ActiveCell.Offset(0, 1): te renvoie la cellule située 1 colonne à droite de celle qui est active
ActiveCell.Offset(-1, 0): te renvoie la cellule située 1 colonne à gauche de celle qui est active
Tu peux même combiner les 2 déplacements ex :
ActiveCell.Offset(-13, 120)--
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
3 mars 2010 à 10:02
3 mars 2010 à 10:02
Essaye :
Dim cellulevoisine As String
cellulevoisine = ActiveCell.Offset(0, 1).Value
MsgBox cellulevoisine
Dim cellulevoisine As String
cellulevoisine = ActiveCell.Offset(0, 1).Value
MsgBox cellulevoisine
Petite erreur à la ligne If isnumeric, en fait ma ligne est
If IsNumeric(Cellule(LigneDeLaCellule, ColonneDeLaCelluleVoisine)) Then total = total + cellulevoisine
Mais le resultat est le même (je fais en mode pas à pas et vérifie les valeurs de chaque variable à chaque fois)
If IsNumeric(Cellule(LigneDeLaCellule, ColonneDeLaCelluleVoisine)) Then total = total + cellulevoisine
Mais le resultat est le même (je fais en mode pas à pas et vérifie les valeurs de chaque variable à chaque fois)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je viens d'essayer cela:
TestCelluleVoisine = ActiveCell.Offset(0, 1)
Mais il ne me met aucune valeur, est ce normal?
TestCelluleVoisine = ActiveCell.Offset(0, 1)
Mais il ne me met aucune valeur, est ce normal?
Je viens d'essayer, le Msgbox est vide.
Il faut une librairie particulière?
Voilà ce que j'ai d'activé:
Microsoft excel 11.0 object library
Microsoft office 11.0 object library
Microsoft forms 2.0 object library
OLE automation
Visual Basic for applications
Il faut une librairie particulière?
Voilà ce que j'ai d'activé:
Microsoft excel 11.0 object library
Microsoft office 11.0 object library
Microsoft forms 2.0 object library
OLE automation
Visual Basic for applications
J'ai testé ActiveCell.Value , il me met vide egalement.
Je ne sais pas si il active la cellule ...
Et comment expliquer que cellule(lignedelacellule,colonnedelacellule) = PAS la cellule!
Je ne sais pas si il active la cellule ...
Et comment expliquer que cellule(lignedelacellule,colonnedelacellule) = PAS la cellule!
Je pense que je viens de trouver!
Le fait que tu m'ai parlé de déplacement m'a mis sur la voix.
Pour A2 il me trouve B3
Pour A3 il me trouve B5
Pour A4 il me trouve B7
En fait le cellule(ligne, colonne) doit ajouter le nombre "ligne" et le nombre "colonne" à cellule comme un offset!
Car en fait ma variable
CelluleVoisineA2Pratique = Cellule(1, 2)
Me donne toujours le bon resultat (B2 pour A2, B3 pour A3 ...)
Bien que je ne comprenne pas pourquoi ça n'est pas cellule(0,1) et que du coup je ne sait pas comment définir une cellule en dur!
Si quelqu'un a la réponse à ces interogations, je suis preneur!
Le fait que tu m'ai parlé de déplacement m'a mis sur la voix.
Pour A2 il me trouve B3
Pour A3 il me trouve B5
Pour A4 il me trouve B7
En fait le cellule(ligne, colonne) doit ajouter le nombre "ligne" et le nombre "colonne" à cellule comme un offset!
Car en fait ma variable
CelluleVoisineA2Pratique = Cellule(1, 2)
Me donne toujours le bon resultat (B2 pour A2, B3 pour A3 ...)
Bien que je ne comprenne pas pourquoi ça n'est pas cellule(0,1) et que du coup je ne sait pas comment définir une cellule en dur!
Si quelqu'un a la réponse à ces interogations, je suis preneur!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 mars 2010 à 12:15
3 mars 2010 à 12:15
Bonjour,
Même si ta syntaxe marche tu devrais utiliser .offset() comme te l'a conseillé pijaku , ce qui est plus lisible.
eric
Même si ta syntaxe marche tu devrais utiliser .offset() comme te l'a conseillé pijaku , ce qui est plus lisible.
eric
Le soucis c'est que si je met cellulevoisine = ActiveCell.Offset(0, 1).Value, peut importe la cellule, cellulevoisine reste vide!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 mars 2010 à 14:44
3 mars 2010 à 14:44
Et pourquoi tu mets activecell alors que ta référence c'est cellule ?
cellule.offset(..., ...)
cellule.offset(..., ...)
Hé bien c'est ce que m'avait indiqué pijaku.
En effet si je remplace activecell.offset(0,1) par cellule.offset(0,1) ça fonctionne!
Par contre sais tu ce que ça change concrettement cette synthaxe? plus rapide?
En tous cas merci à vous!
Ps: je vous invites desormais à m'aider sur un autre soucis VBa ! excel :
https://forums.commentcamarche.net/forum/affich-16854408-excel-vba
En effet si je remplace activecell.offset(0,1) par cellule.offset(0,1) ça fonctionne!
Par contre sais tu ce que ça change concrettement cette synthaxe? plus rapide?
En tous cas merci à vous!
Ps: je vous invites desormais à m'aider sur un autre soucis VBa ! excel :
https://forums.commentcamarche.net/forum/affich-16854408-excel-vba
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 mars 2010 à 16:01
3 mars 2010 à 16:01
Plus rapide je ne pense pas. C'est surtout que ta syntaxe m'était totalement inconnue, tandis qu'avec offset() on sait tout de suite à quoi tu veux faire référence.
pijaku te donnait des exemple de syntaxe, c'était à toi d'adapter. Activecell fait référence à la cellule active, cad celle qui est sélectionnée sur la feuille.
pijaku te donnait des exemple de syntaxe, c'était à toi d'adapter. Activecell fait référence à la cellule active, cad celle qui est sélectionnée sur la feuille.