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
Bonsoir le fil, le forum

@Zhanties
Je te laisse deviner le caractère que j'ai ajouté dans ta macro
VB:
Sub ForNextImbriqué_bis()
Dim Col As Long
Dim Lign As Long
Dim Cnt As Integer
Dim x As Integer
x = 0
For Col = 1 To 10
    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

Pour la seconde, il manque dans le code copié dans ta discussion, deux fonctions
GetSetting et SaveSetting
(normalement elles sont dans ton bouquin, sinon on les trouve sur le web après un rapide G..gl.ng)

Pour la troisième, là aussi, je te laisse trouver ce que j'ai corrigé
(je ne parle pas ce que j'ai ajouté, mais ce que j'ai corrigé dans ta syntaxe existante )
VB:
Sub CompteGras_bis()
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 Len(Cellule) Then ' petit ajout pour ne tester que les cellules non-vides
                If Cellule.Font.Bold Then
                compte = compte + 1
                End If
                End If
            Next Cellule
        Next Feuille
    Next Classeur
MsgBox compte & " Cellule(s) en caractères gras trouvée(s)", vbInformation, "Résultats"
End Sub
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonsoir Zanthies, re Jean Marie

VB:
Sub Incrementation()
Dim i As Long

    For i = 2 To 11
        Sheets("Feuil1").Cells(i, 1) = i - 1
    Next i
End Sub

Private Sub Workbook_Open()
Dim Cnt As Long

    With Sheets("Feuil1")
        .Range("z1") = .Range("z1") + 1
        Cnt = .Range("z1")
    End With

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

Sub Cellules_Gras()
Dim Sh As Worksheet, Classeur As Workbook, cel As Range, compte As Long

    For Each Classeur In Workbooks
        For Each Sh In Classeur.Worksheets
            For Each cel In Sh.UsedRange
                If cel.Font.Bold = True Then
                    compte = compte + 1
                End If
            Next cel
        Next Sh
    Next Classeur
    Sheets("Feuil1").Range("b2") = compte
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
La question était de trouver ce qu'il n'allait pas dans ces macros "recopiées*" d'un bouquin qui sert d'apprentissage à Zhanties
C'est pour cela que je n'ai pas indiqué où se situe les erreurs (pour qu'il les trouve lui-même)
(*: je suppose qu'il s'agit d'erreurs de copier/coller ou de recopie)

PS: Ta macro Cellule_Gras ne fait pas ce que fait la macro originale
(voir ma "correction")
 

Staple1600

XLDnaute Barbatruc
Re

@Lone-wolf
Moi je dis cela, je dis rien
Le demandeur étant en apprentissage VBA, avant de découvrir une autre façon de faire, n'est-il pas plus "logique" qu'il comprenne pourquoi ses codes de son 1er message ne fonctionnent pas correctement ?
Une fois ce point levé, il sera bien temps de lui proposer une autre façon de faire, non ?

Sur ce, bonne nuit, je file sous les draps.

PS: Pour la macro Cellules_en_Gras, l'initiale parcours toutes les feuilles de tous les classeurs ouverts.
Pas la tienne, ce qui pourrait perturber le demandeur dans son apprentissage
 

eriiic

XLDnaute Barbatruc
Bonjour,

mais les résultats donnés ne sont pas bon.
Ok, mais c'est quoi les bons ?

Quand je lis :
VB:
        For Cnt = 1 To 10
            x = x + Cnt
c'est bon si tu veux générer la suite des nombres triangulaires, mais est-ce vraiment que tu veux... ? Mystère et boule de gomme
eric
 

eriiic

XLDnaute Barbatruc
Bonjour,

ah, je n'avais pas vu qu'il reprenait un de ses bouquin.
Tiens, tu veux un bouquin surprenant par son contenu ? (pas de lui)
Magique Excel, Pearson Education.
Ca m'a rappelé les débuts de l'informatique où il y avait plein de livres avec du vrai contenu ;-)
Si tu as l'occasion de le feuilleter, il y a un risque que tu repartes avec
eric
 

Modeste geedee

XLDnaute Barbatruc
BONSOUR®
Re

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

RIP ....
Chip Pearson passed away on April 19, 2018.

ce n'est pas un bouquin de Chip H Pearson,
mais comme le précise Eric , de Pearson Education UK
Biographie de l'auteur
Jens Fleckenstein, Walter Fricke et Boris Georgi sont tous les trois professionnels de la finance. Férus de logique mathématique et inlassables explorateurs d'Excel, ils créent en 2002 un site Web dédié aux fonctions et astuces méconnues du logiciel (www.excelformeln.de). Du phénoménal succès de leurs découvertes est né cet ouvrage.
 

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…