Besoin d'aide sur une macro

Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006
- 24 mars 2006 à 11:29
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006
- 27 mars 2006 à 08:54
660990 Bonjour à tous

J'aurais besoin que quelqu'un m'aide à paufiner une macro.
Voila je vous explique, j'ai une macro qui teste les cellules sur une plage donnée et qui masque les colonnes qui sont vides
Voici mon tableau
A B C D
1 n° offre nb de pièce Délais Réalisé
2 12 0 3j 0
3 0 20 8j 0
4

Ma macro teste la plage A2:D3 et si la somme d'une colonne est égale à 0 comme ici la D, elle me la masque.
Cependant il doit y avoir un détail dasn ma macro qui ne marche pas. en lançant ma macro elle va également me maquer la colonne 2. En fait lorsque dans la première cellule elle rencontre 0 alors elle masque(ce qui n'est pas le cas pour la colonne A
Comment résoudre ce probleme????
voici ma macro
Sub Coupe_Colonne()

Worksheets("Feuil1").Activate
Range("A2:D3").Select
areacount = Selection.Areas.Count
nbrcol = Selection.Columns.Count
nbrlig = Selection.Rows.Count


numlig = 2

For numcol = 1 To nbrcol
If Feuil1.Cells(numlig, numcol).Value = 0 Then



somcol = 0

For numlig = 2 To nbrlig
somcol = somcol + Feuil1.Cells(numlig, numcol).Value
'm = ""
'm = m + "value : " + CStr(Feuil1.Cells(numlig, numcol).Value) + vbCrLf
'm = m + "somcol : " + CStr(somcol)
'MsgBox m
Next
If somcol = 0 Then
MsgBox "masquage colonne" + CStr(numcol)
'là on masque
Columns(numcol).Select
Selection.EntireColumn.Hidden = True
End If
End If




Next

End Sub

Merci d'avance

16 réponses

jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 12:21
Salut,

Ta boucle
For numlig = 2 To nbrlig
somcol = somcol + Feuil1.Cells(numlig, numcol).Value
.....
Ne parcours pas toute la plage (Si tu regarde la valeur de nbrlig 2) For ... 2 To 2 donc elle ne passe qu une fois au lieu de 2

CORRECTION:

For numlig = 1 To nbrlig
somcol = somcol + Feuil1.Cells(numlig + 1, numcol).Value

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 13:55
Salut,

La macro ne fonctionne plus si j'apporte la modif que tu m'as soumise, tu sait pourquoi?
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 14:06
Un truc que je ne comprends pas pourquoi mettre
For numlig = 1 To nbrlig
somcol = somcol + Feuil1.Cells(numlig + 1, numcol).Value
alors que je veux que ma macro teste les cellules à partir de la 2ème ligne ??
D'autre part si tu reprend le tableau au dessus imagine que dans une colonne au lieu d'avoir un chiffre j'ai des lettre du style dans délais on marque "non défini" et que dans le autres j'ai des 0, la somme de la colonne sera égale à 0 non ? Comment ça se passe si je veux également que quand il y ai des caractères autre que 0 la colonne ne soit pas masquer.
Je cherche depuis un moment mai la je bloque, si tu voulais bien m'aider se serait sympa
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 14:56
Re,

Mais c est ton programme, je ne sais pas moi ce qu il est censer faire....

Je te dit simplement que dans la boucle que tu avais, La ligne 3 n'etait pas testée... c est tout.

En faisant du debug (avec F8) ou en mettant un point d'arret avec F9 tu l'aurais vu ... seul....

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 14:56
Re,

Note que numlig + 1 = 2 ...

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 15:01
Donc pour ton info je suis novice en VB, donc le programme c'est quelqu'un qui me la montrer sur le site et que je ne le comprends pas forcément.
Tous ce que je sais c'est que je n'arrive à ce dont je dois arriver, d'où ma recherche de solutions.
Merci quand même
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 15:11
Re,

Mais, je ne remets en question le fait que tu sois novice.
Je te dis simplement que ta boucle ne parcoure pas toute la plage comme tu le souhaites voila tout.

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 15:16
Je te dérange encore et fait appelle a tes services de nouveau...
Si je t explique ce que je voudrais que ma macro fasse tu crois que tu pourrais m'expliquer la macro qu'il faudrait que je fasse, en oubliant celle d'avant ??
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 15:25
Re,

Mais pas de probleme

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
cs_David_wklw
Messages postés
48
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2006

24 mars 2006 à 15:26
Hello,

Perso, je ferais une macro de ce type :

j'utiliserais ceci pour obtenir tes sommes :

Application.WorksheetFunction.Sum(Columns(1))

1=première colonne..... etc

En espérant que cela t'aide
0
cs_David_wklw
Messages postés
48
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
24 mars 2006

24 mars 2006 à 15:26
Hello,

j'utiliserais ceci pour obtenir tes sommes :

Application.WorksheetFunction.Sum(Columns(1))

1=première colonne..... etc

En espérant que cela t'aide
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 15:57
A mais finalement tu n'es peut-être pas si méchant que ça !!
J'ai un tableau d'offre commerciale qui se remplit en automatique par l'intermédiaire d'un autre fichier. Je te donne un exemple
A B C D
1 N offre Nb Pièces Délai Délai réalisé
2 projet B2 300 0 sem
3 projet 3 0 1 sem
4 projet N4 20 5 sem

Donc je voudrais une macro qui me teste la zone A2:D4, et qui quand me trouve une colonne vide en l'occurence la C, me la masque.
Le tableau n'est pas cohérent mais c'est un exemple.
Et ce que tu veux plus de précision?
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
24 mars 2006 à 16:08
Re,

Il faudrait que tu puisse connaitre de facon automatique la derniere ligne remplie.

Exemple jusqa Ligne 4.

Ensuite tu fais pour chaque colonne une somme. (le probleme etant les endroits ou tu n as pas que des chiffres=> X Sem)
Donc une somme de la ligne 2 a la ligne 4 (INCLUSE)

Et ensuite tu masque les colonnes.

J en reviens a la correction que j avais faite dans le premier poste.
J ai teste avec Excel, et ca avait pour resultat de me masquer que la colone desiree, pourquoi chez toi ca ne fonctione pas?

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

24 mars 2006 à 16:44
Je t'avouerai que faire une macro de ce genre ça me semble vraiment inaccessible pour moi qui bricole vraiment en VB.
Et en ce qui concerne ta correction elle fonctionne partiellement, j'avais juste oublié un détail.
Je galère trop, parceque défoi dans une cellule, j'ai une unité style euro donc ca me met 0 euros (format de la cellule). Mais comment je vai m'en sortir julien?????
L'idéal serait que je tenvoie un fichier type pour que tu comprenne la galère.
0
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
24 mars 2006 à 16:59
A noter que :



"Une colonne vide", ce n'est pas la même chose que "la somme de la colonne est nulle".



S'il y a "12" et "-12" dans ta colonne, la somme est nulle, mais je suppose que tu ne veux pas la masquer.

Dans cette optique, l'utilisation d'une somme va te poser des problèmes, y compris avec les données du style "3j".








Dim lFirstRow As Long, lLastRow As Long

Dim lFirstColumn As Long, lLastColumn As Long

Dim k As Long

Dim m As Long

Dim bUneValeurAEteTrouvee As Boolean

Dim sRange As String



sRange = "A2:E4"

lFirstRow = 2

lLastRow = 4

lFirstColumn = 1

lLastColumn = 5



For k = lFirstColumn To lLastColumn

bUneValeurAEteTrouvee = False

For m = lFirstRow To lLastRow

If Cells(m, k).Formula <> "" Then

bUneValeurAEteTrouvee = True

End If

Next m

If Not bUneValeurAEteTrouvee Then

Columns(k).Select

Selection.EntireColumn.Hidden = True

End If

Next k





Reste, à partir de sRange, à déchiffrer à coup sûr, et automatiquement, les numéros de lignes et de colonnes incriminés.




Manu
0
Lyly601
Messages postés
67
Date d'inscription
jeudi 5 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2006

27 mars 2006 à 08:54
Salut Manu,

Merci pour ton info et ta macro. J'ai juste oublié de te préciser quelque chose, mon tableau est remplie automatiquement en fonction d'un autre fichier, donc par exemple dans ma cellule A2 j'ai une formule du type Si (H10=0;"";H10). Imaginons que H10=0 alors ma cellule A2 est bien vide mais ça ne me la masque pas.
J'ai essayé de faire un tableau simple et ta macro fonctionne bien mis à part ce problème, tu as une idée sur ce que je dois faire?

Aurélie
0