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.
@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
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
@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")
@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
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
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.