MACRO

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonsoir,

Niveau plus que débutant.Excel 2007

J' ai un tableau qui fait 120 lignes. J'ai inséré une colonne A avec une formule qui affiche la lettre "A" lorsqu'une ligne est remplie et "B" lorsque cette dernière est vide.

La macro que j' ai essayé de faire masque toutes les lignes contenant la lettre"B" de manière à afficher un tableau qu'avec des lignes remplies.

Cela donne :

Sub Masque()
Dim champs As Variant
Dim Celrange As Range
Set ra = Range("A2:A120")

For Each champs In Celrange
If champs.Value Like "B" Then
champs = EntireRow.Hidden
End If
Next
End sub

Lorsque je lance la macro....eh bien il ne se passe rien.

Pouvez vous m' aider à comprendre mes erreurs.

Merci et bonne soirée.

CARPE DIEM

7 réponses


Bonjour,

For Each champs In Celrange 


Juste là puisque Celrange n'est pas défini, il vaut une plage vide; donc ta boucle ne s'exécute pas.

Et puis, pas besoin d'une macro pour faire ce que tu dis vouloir faire. Un simple filtre suffit.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
et :
1) l'utilisation de l'opérateur Like sans caractère(s) générique(s) est ici abusive !
If champs.Value Like "B" Then
veut finalement dire, mais de manière plus lourde et lente :
If champs.Value = "B" Then
2) si des formules se trouvent dans la plage traitée, c'est la propriété Text et non value, qu'il faut utiliser pour repérer le résultat de la formule.
3)
champs = EntireRow.Hidden

---a) entirerow (qui est une propriété) de quoi ?
---b) la propriété hidden est une booléenne. Champs serait donc une booléenne (en admettant qu'on objet soit défini pour la propriété EntireRow) !µ
Or (quelques lignes plus haut), champs serait une cellule !
Il est clair que les bases manquent et qu'elles sont trop nombreuses à manquer.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut vvvince

Pour compléter les infos de ucfoutu, j'ajoute ces petits détails :
- Les macros sont développées avec VBA, pas VB6 --> Catégorie "Visual Basic 6
> Langages dérivés > VBA"
Dans ce cas, cela parait évident que c'est du VBA, mais ce n'est pas toujours évident et les solutions peuvent être différentes.
- Le titre de ta question est un peu générique.
- Collage de code : Merci d'utiliser la coloration syntaxique = 3ème icone à droite :
Tu colles ton code, tu le sélectionnes puis tu cliques sur cette icone pour choisir VB.
Le code apparaitra colorisé et conservera les indentations (espaces en tête de lignes) rendant plus facile la relecture.

Pour ton code, voilà une méthode pour résoudre 50% de tes problèmes :
Rends la déclaration de tes variables obligatoire (voir options) : Cela ajoutera "Option Explicit" en tête de chaque nouvelle page de code.
Cela va t'obliger à dimensionner chaque variable et ainsi réfléchir à leur type exact et à leur étendue.
Dans ton cas, cela aurait mis en évidence que tu as dimensionné 'CelRange' mais que tu as rempli une variable 'ra' à la place, d'où le bug.
+ Aller dans le menu "Débogage" et demander une compilation du projet. Là, il mettra le doigt sur les petits problèmes avant d'exécuter le code

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
J'allais oublier la méthode de débogage pour suivre, ligne à ligne ce que fait ton programme :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage.
Lors de l'arrêt, survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
Bonsoir à toutes et tous,

Merci pour vos réponses et vos conseils.

Comme vous avez pu le constater, c'est mon premier post et mes questions doivent vous paraitre "bête".

Jack, lorsque tu parles de " Collage de code" je ne vois pas le troisième icône à droite dont tu parles. De plus concernant :

" Lors de l'arrêt, survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
Code Visual Basic :

? maVariable

pour qu'elle s'inscrive dans la fenêtre."

J' ai lancé une macro en pas à pas, je vois bien l' action du F9.Mais je vois pas l' action avec " ?maVariable ".

Bonne soirée à tout le monde. javascript:void(0);

CARPE DIEM
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
dans "? mavariable" il est clair que "mavariable" est à remplacer par le nom de la variable concernée par cet "examen"

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Tu gagnerais tout simplement beaucoup à lire attentivement les rubriques suivantes de ton aide VBA :
Définition et suppression des points d'arrêt
Suivi de l'exécution du code
Utilisation de la fenêtre Exécution
Poursuite de l'exécution du code
Exécution d'une instruction déterminée
Arrêt de l'exécution du code



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.