Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

vba test : erreur de compteur

Zhanties

XLDnaute Nouveau
Bonjour,

je m'entraine avec le livre VBA pour les Nuls et 3 petites macro me posent soucis avec comme points communs un problème de compteur.
La première est une simple boucle For Next pour incrémenter sur une une colonne les valeurs 1,2,3...jusqu'à 10, mais les résultats donnés ne sont pas bon. Par défaut le calcul s'effectue directement en colonne A. Dois-je définir un objet range pour choisir où le calcul a lieu?

Code:
'Problème : le calcul s'effectue mais donne d'autre valeur.
Sub ForNextImbriqué()

Dim Col As Long
Dim Lign As Long
Dim Cnt As Integer
Dim x As Integer

x = 0

For Col = 1 To 1
    For Lign = 1 To 10
        For Cnt = 1 To 10
            x = x + Cnt
            Cells(Lign, Col) = x
        Next Cnt
    Next Lign
Next Col

End Sub


La seconde macro est une procédure d'évènement d'ouverture du classeur. Un classique du genre : il s'agit de dire combien de fois le classeur a été ouvert. Ici le compteur répète 1 constamment, qu'importe le nombre de fois que ce dernier a été ouvert.

Code:
Private Sub Workbook_Open()

Dim Cnt As Long

Cnt = GetSetting("MyApp", "Settings", "Open", 0)

Cnt = Cnt + 1
SaveSetting "My app", "Settings", "Open", Cnt

    MsgBox "Ce classeur a été ouvert" & Cnt & " fois."
 
End Sub


Enfin, la dernière macro est censé effectuer une boucle à travers chaque cellule de la plage utilisée, et ce pour chaque feuille de chaque classeur ouvert et dire le nombre de cellule qui contient des caractères gras. Pareil ici, elle affiche 0.

Code:
Sub CompteGras()

Dim Classeur As Workbook
Dim Feuille As Worksheet
Dim Cellule As Range
Dim compte As Long

    For Each Classeur In Workbooks
        For Each Feuille In Classeur.Worksheets
            For Each Cellule In Feuille.UsedRange
                If Cells.Font.Bold = True Then
                compte = compte + 1
                End If
            Next Cellule
        Next Feuille
    Next Classeur

MsgBox compte & "Cellules en caractères gras trouvées"


End Sub


Merci à ceux qui ont envie de regarder. Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re

@Modeste geedee
Je n'ai jamais parlé de Chip Pearson* mais de la maison d'édition Pearson
Re

@eriiiic
Tu as son numéro ISBN par si je connais Pearson Education, je ne retrouve pas ce livre sur leur site ?


(*J'ai d'ailleurs été étonné que personne évoque son décès sur XLD.)

NB: Modeste: Merci grâce à tes infos, j'ai pu trouver l'ISBN correspondant: 2744072427
Et je connaissais ce bouquin (mais je ne le possède pas)
Faudra que je vérifie si'il est toujours à la bibli où je l'ai jadis consulté.
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Dernière édition:

Zhanties

XLDnaute Nouveau
Bonsoir et merci de vos réponses.
Alors je suis bien sur le livre de John Walkenbach et il y a bel et bien des coquilles dans le livre directement.
J'en avais déjà repéré une par moi-même.

Pour la macro "Sub Cellules_Gras()" @Staple1600 j'ai bien trouvé l'erreur en regardant ta nouvelle syntaxe et j'ai compris le pourquoi du comment effectivement.
Petite question : je ne saisis pas trop comment "len" fonctionne car il est utilisé ici pour tester les cellules non vides mais je vois de mon côté qu'il renvoie le nombre de caractères d'une chaîne.

En ce qui concerne ma première macro "Sub ForNextImbriqué()",
@Staple1600 je vois que tu as augmenté la variable Col à 10 pour faire un carré. Mais je ne comprend pas toujours les résultats donnés.
En effet je voulais juste faire sortir sur une colonne les valeurs de 1 jusqu'à 10 de Range A1 à A10 (ce qui répond à "c'est quoi les bons?" de @eriiiic )par exemple. Or les résultats que je trouve en lançant ma macro ainsi que la tienne sont : 55, 110, 165, 220, 275 , 330, 385, 440, 495, 550 (et plus pour la tienne étant en sur 10 lignes de 10 colonnes).
Pour le coup, la macro de @Lone-wolf Sub_Incrementation marche pour le bon résultat et de manière bien plus simple. Mais j'aimerai néanmoins savoir ce qui donne un mauvais résultat de ma macro. Mon but étant de réussir à faire des boucles corrects.

Enfin pour la macro Private sub_Workbook Open(), ta réponse @Lone-wolf marche et je te remercie de ta variante. Mais j'aimerai néanmoins savoir ce qui ne va pas avec la mienne. Aussi @Staple1600 , je n'ai pas réussi à trouver ce qu'il manque avec le GetSetting et SaveSetting
 

Lone-wolf

XLDnaute Barbatruc
Bonjour le Fil

@Zhanties : je laisse les plus experts répondre à ce qui ne vas pas dans tes macros. Pas très doué pour répondre, mis à part la boucle For Col

Puisque tu n'utilise qu'une colonne, la boucle est de trop.
Vu que tu incrémente x pas besoin de rajouté + Cnt, tu écrit x = x + 1 tout simplement.

Pour incrémenter de gauche à droite, par exemple de la colonne A à la colonne E et une seule cellule

For Col = 1 To 5
x = x + 1
Cells(2, Col) = x
Next Col


@Staple1600 : au lieu de Len, pourquoi ne pas utiliser if cel <> vbnullstring then, puisque j'ai appris que même si une cellule est vide elle contient quand même quelque chose (Dranreb).
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re,

@Lone-wolf : on aurait pu aussi, en précisant le .value quand même.
Ou bien ="" qui est souvent utilisé.

oui, ces 2 lignes m'avaient interpellées :
Code:
        For Cnt = 1 To 10
            x = x + Cnt
Tu n'incrémentes pas ton compteur de 1 10 fois, mais tu lui ajoutes 1, puis 2, puis 3, etc
C'est ce qu'on appelle les nombres triangulaires :
1 3 6 10 15 21 28 36 45 55 etc
Ils ont leur usage mais c'est assez rare d'en avoir besoin.
eric
 

Discussions similaires

Réponses
4
Affichages
468
Réponses
5
Affichages
326
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…