Explications code VBA suite....

Calvus

XLDnaute Barbatruc
Bonjour,

je transfère ici la discussion commencée ici, pour ne pas squatter le fil de marleauc.
Hein Staple ? :cool:
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re

Oh mol ce que j'en dis ;)
C'est surtout la charte du forum qui va être contente ;)
c) A moins que deux questions soient réellement liées au même problème, il est souhaitable de faire un nouveau sujet par question. Ceci dans le but de rester dans un sujet précis tout au long d’un fil de discussion. Donc autant que possible : Une Question = Un fil de discussion

C'est bien de créer une nouvelle discussion, c'est mieux de ne pas oublier d'y indiquer les explications adéquates ou un rappel de la question posée. ;)
 

Calvus

XLDnaute Barbatruc
Re : Explications code VBA suite....

Ok, ça fait beaucoup tout ça :D

Petite remarque, j'étais resté sur le fait d'expliquer du code vba, je ne m'étais donc pas éloigné du sujet, enfin me semble t'il.
Mais c'est pas grave tout ça.

Donc précédemment:

salut


Si... tu veux appeler une fonction connue, essaie plutôt
Code:
[AA3] = Application.CountIf(Range("B8:X8"), "<>")
d'ailleurs, dès que tu saisis le . après Application, tu as une liste de possibilités.
Pour avoir les fonctions, la syntaxe complète est Application.WorksheetFunction. et, après la saisie du ., tu as une nouvelle liste de choix.
A noter que le mot WorksheetFunction peut être effacé sans danger.

Puis
Bonjour,

Il fallait donc ajouter Application à Countif. Ok, merci. Mais l'enregistreur de macro ne le fait pas lui. :
[AA3] = "=COUNTIF(R[-22]C[-24]:R[-22]C[-2],""<>"")"

Je pige pas tout, mais c'est pas grave. Ca fonctionne en tout cas comme ça.

Merci

A la suite maintenant ! :)
 

kjin

XLDnaute Barbatruc
Re : Explications code VBA suite....

Salut,
Code:
Sub nbvaleurs_plage()
formule = "=COUNTIF($B1:$B10,""<>"")"
Range("A1").Formula = formule                                    'formule insérée en A1
nbvaleurs = Application.CountIf(Range("B1:B10"), "<>")  'la même interprétée en vba
nbvaleurs = Evaluate(formule)                                       'idem mais à partir de la formule
End Sub
A+
kjin
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re

Calvus
Ou se situe ce que tu ne comprends pas?
Code:
Sub calvus()
' ligne pour créer des données de test
Range("A1:A5") = Application.Transpose(Array("A", vbNullString, "B", vbNullString, "C"))
Range("B1").FormulaR1C1 = "=COUNTIF(RC[-1]:R[4]C[-1],""<>"")"
MsgBox "Une possibilité:" _
& "Application.CountIf(Range(""A1:A5""), ""<>"") donne: " & Application.CountIf(Range("A1:A5"), "<>")
MsgBox "Une autre:" _
& "Application.WorksheetFunction.CountA(Range(""A1:A5"")) donne: " & Application.WorksheetFunction.CountA(Range("A1:A5"))
MsgBox "Une dernière:" _
& "Application.CountA(Range(""A1:A5"")) donne: " & Application.CountA(Range("A1:A5"))
End Sub

EDITION: Désolé mon bon kjin, je viens juste de vous voir ;) (et la charade ???)
 

Calvus

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re,

Bon, j'ai tenté de comprendre vos explications, c'est un peu moins flou. Mais je pense certainement revenir là-dessus.
En tout cas, je vois qu'il y a plusieurs méthodes pour arriver à un même résultat.
Rassurez moi juste un peu.... ça vous a quand même pris un peu de temps pour intégrer tout ça non ? :eek:

Je reviens avec un autre souci (l'idée de départ en fait).
Maintenant, grâce à vous tous, j'arrive à compter un nombre de cellules selon un critère.
J'ai naïvement pensé que je pourrais mettre le critère de mon choix ! Oh, misérable ignorant que tu es ! Tu pensais que tu pourrais t'en sortir comme ça, sans faire la fortune du pharmacien et de l'ophtalmo ?? Petitus Crétinus va !

Donc, je vous joins un fichier où
  1. On peut récupérer le code couleur à partir d'une cellule sélectionnée.
  2. On peut tester une macro d'après un code couleur
  3. On peut tester la fonction CountIf, qui fonctionne
  4. On ne peut pas tester CountIf en fonction d'une couleur, ça ne fonctionne pas
  5. Et enfin un code où j'essaie de compter de manière différente, mais autant compter le nombre de caractères inscrits dans ce site depuis sa création !

J'ai écumé les pages du site depuis ce matin (eh oui, il pleut, même sur la côte d'azur...), et j'ai l"impression de moins comprendre qu'au début.
Mon dernier code inspiré d'une aide d'excel, dixit Staple. Ici

Merci de vos explications, et surtout, au moins une réponse simple à une question simple, pourquoi le code
Code:
[J10] = Application.CountIf(Range("b8:x8"), "Interior.Color = 2770250")
refuse t'il de fonctionner, ou tout au moins renvoie une valeur zéro ?

Cordialement

Edit : Pff, j'ai oublié le fichier !
 

Pièces jointes

  • CountIf Calvus.xls
    37.5 KB · Affichages: 41
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re


Attention à tes adresses de Range
Un de tes exemples modifiés (avec avant cellules A10 et C10 mis en rouge )
Code:
Sub compte_couleur()
'[J10] = Application.CountIf(Range("b8:x8"), "Interior.Color = 2770250")
Dim i, j
For i = 1 To 8 'ATTENTION plage concernée A10:H10
If Cells(10, i).Interior.ColorIndex = 3 Then
j = j + 1
End If
Next i
[J10] = j
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re

Attention aussi à la syntaxe ;)
Code:
Sub testdecouleur()
Dim coul As Range, c As Range, i
Set coul = Range("A10:H10")
For Each c In coul
    If c.Interior.ColorIndex = 3 Then
    i = i + 1
    End If
Next c
[AA3] = i
End Sub
 

Calvus

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re,

Attention à tes adresses de Range
Un de tes exemples modifiés (avec avant cellules A10 et C10 mis en rouge )

Oui merci, je venais de remarquer l'erreur.

Attention aussi à la syntaxe

Ok, mais quoi exactement ?

Ceci dit, j'ai copié collé tes codes, ils ne donnent rien. Normal ?
Et pourquoi on ne peut pas faire avec CountIf ?

Ceci marche dans un autre faichier, mais ne compte qu'une fois.
Code:
Sub Appliquer_Dapres_Couleur()
Dim c As Range
For Each c In Range("b8:x8")
If c.Interior.Color = 2770250 Then
[Z32] = [X32] + 50
End If
Next c
End Sub

Merci.

PS: pas encore trouvé ta charade, ni celle de Kjin d'ailleurs. :D
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re

J'avais précisé:
Un de tes exemples modifiés (avec avant cellules A10 et C10 mis en rouge )

J'utilise Interior.ColorIndex et toi Interior.Color

PS1: Je teste les codes avant de les envoyer sur le forum ;), et ici ils fonctionnent...

PS2: Tu as consulté les archives du forum, ?
Les exemples de code pour sommer ou dénombrer des cellules en couleur sont légion.

Sans oublier les autres ressources sur le Web.
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Explications code VBA suite....

salut

Si... tu veux cumuler, il te faut un compteur
Code:
Sub Appliquer_Dapres_Couleur()
  Dim c As Range, n As Byte
  For Each c In Range("b8:x8")
    If c.Interior.Color = 2770250 Then
      n = n + 1
      [Z32] = [X32] + 50 * n 'ou [Z32] = [X32]*n + 50
    End If
  Next
End Sub

une variante (non avariée) du code de Staple;)
Code:
Sub testdecouleur()
  Dim c As Range
  [AA3] = 0
  For Each c In Range("A10:H10")
    [AA3] = [AA3] - (c.Interior.ColorIndex = 3)
  Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re

Bonjour Si...
une variante (non avariée) du code de Staple;)
Code:
Sub testdecouleur()
  Dim c As Range
  [AA3] = 0
  For Each c In Range("A10:H10")
    [AA3] = [AA3] - (c.Interior.ColorIndex = 3)
  Next
End Sub
L'avarie se situe quel niveau, Capitaine?
Car dans les deux cas , AA3 = 2

PS: Je suis parti de l'exemple de Calvus où la salle des machines prenait déjà un peu l'eau ;)
 

Si...

XLDnaute Barbatruc
Re : Explications code VBA suite....

re

désolé pour le mal entendu, ce n'est pas ton code que j'estimais erroné.
Comme toi, je contrôle avant d'envoyer la sauce. Au passage, il me semble avoir lu que tu aimais les double If (IIf). Pour ma part j'essaie d'éviter même les simples (je n'aime pas les End If ;))
 

kjin

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re, Si, Staple,
On ne peut pas tester CountIf en fonction d'une couleur, ça ne fonctionne pas
NB.SI (COUNTIF en angliche) est une fonction native d'excel qui permet de compter le nombre de valeurs dans une plage répondant à un critère de valeur, pas de format !
Si tu veux compter le nombre de cellule colorées, il faut créer une fonction personnalisée
Staple et Si t'ont mis sur la voie
Note que si la couleur est appliquée par mfc, ce sont les conditions de la mfc qu'il faudra tester, vba étant incapable de détecter la couleur dans ce cas
Je réponds à la question moi !!!! :p
A+
kjin
 

Staple1600

XLDnaute Barbatruc
Re : Explications code VBA suite....

Re


re
Comme toi, je contrôle avant d'envoyer la sauce. Au passage, il me semble avoir lu que tu aimais les double If (IIf). Pour ma part j'essaie d'éviter même les simples (je n'aime pas les End If ;))
Avant d'avoir lu quelque part sur XLD qu'il valait mieux éviter le IIF (je sais plus dans quel fil), c'est vrai que je kiffais l'iif ;)
Mais comme dirait Alain D .: " Ça c'était avant" ;) (En cherchant ailleurs j'ai retrouvé pourquoi)

PS:Moi aussi quand le fun me gagne , je m'amuse avec des choses du genre:
Code:
Sub a()
Dim i%
Range("A1:A5") = Application.Transpose([{1,0,32,0,64}])
On Error Resume Next
For i = 1 To 5
    With Cells(i, "A")
        .BorderAround , -4 * (.Value = 0), 13
        .Font.Bold = (.Value > 0)
    End With
Next i
End Sub

kjin: tu lis pas tes MP ???
En passant ceci est une affirmation, pas une question :D
On ne peut pas tester CountIf en fonction d'une couleur, ça ne fonctionne pas
Je n'avais donc rien à répondre.
 
Dernière édition:

Statistiques des forums

Discussions
312 911
Messages
2 093 509
Membres
105 744
dernier inscrit
laure.mg