rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[VBA excel] mise en forme conditionnelle

Posté par pol_38, le lundi 16 juillet 2007 à 14:48:10
Bonjour a tous,

Je cherche a faire en VBA l'equivalent d'une mise en forme conditionnelle mais en faisant porter ma condition sur une plage de donnes situee dans une autre feuille que celle utilisee (ce que, a ma connaissance, la MEFC ne sait pas faire).

Voici ce que j'ai fait comme code, ca coince au niveau du 'If' :

Sub form()
Sheets("donnes").Select

Dim i As Integer
Dim j As Integer

i = 10
j = 2

While Cells(i, 3).Value <> ""

For j = 1 To 18

If Cells(i, 3).Value = Sheets("conditions").Cells(j, 1).Value Then
Selection.Font.Bold = True
End If
j = j + 1
Next
i = i + 1
Wend

End Sub


Sans doute est-ce parceque excel ne comprends pas 'Sheets("conditions").Cells(j, 1).Value ' ???

Merci de votre aide toujours precieuse !!!

Pol
Configuration: Windows XP
Excel 2003
Répondre à pol_38  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papou, le lundi 16 juillet 2007 à 15:15:16
Bonjour Pol_38,

Essaies ce code modifié :

Sub form() 
Dim i As Integer 
Dim j As Integer 

i = 10 
j = 2 

With Sheets("donnes")
  While .Cells(i, 3).Value <> "" 
    For j = 1 To 18 
      If .Cells(i, 3).Value = Sheets("conditions").Cells(j, 1).Value Then 
        Selection.Font.Bold = True 
      End If 
    j = j + 1 
  Next 
i = i + 1 
Wend 

End Sub 

Cordialement.
Répondre à Papou

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
pol_38, le lundi 16 juillet 2007 à 16:35:31
Bonjour Papou,

Ca ne marche pas, il coince toujours a la formule If...
Le probleme ne viendrait-il pas du fait que Sheets (''conditions'') n'est pas active?

cordialement

Pol
Répondre à pol_38

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papou, le lundi 16 juillet 2007 à 20:16:26
Re-bonjour pol_38,

Chez moi ça fonctionne, j'ai testé que même s'il n'y a rien dans les 3 premières colonnes, le résultat affiche 12 zéros.
Il n'est pas nécessaire d'activer les feuilles pour manipuler les cellules.
As-tu essayé de lancer la macro en mode débogage afin de pouvoir tester les variables ?
si tu le veux, tu peux m'envoyer ton fichier (sans données confidentielles, bien sûr !) à l'adresse suivante :

papou79@hotmail.fr

Cordialement.
Répondre à Papou

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papou, le lundi 16 juillet 2007 à 20:27:21
Excuses-moi pol_38,

J'ai confondu avec un autre poste.
Il fallait lire :

Il n'est pas nécessaire d'activer les feuilles pour manipuler les cellules.
As-tu essayé de lancer la macro en mode débogage afin de pouvoir tester les variables ?
Si tu le veux, tu peux m'envoyer ton fichier (sans données confidentielles, bien sûr !) à l'adresse suivante :

papou79@hotmail.fr

Cordialement.
Répondre à Papou

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papou93, le mardi 17 juillet 2007 à 08:32:51
Bonjour po_38,

Je reviens sut ton programme que j'ai eu le temps d'analyser.
J'ai 2 questions à te poser :
1- Sur quelle feuille veux-tu passer les cellules en gras ?
2- Pourquoi incrémenter 'j' à l'intérieur de la boucle 'For j ...' (ne faudrait-il pas mieux descendre cette ligne sous le 'next') ?
Et une remarque :
Dans ta condition 'If ... Then', remplace selection par l'adresse de la cellule que tu veux passer en gras, sinon c'est toujours la même cellule (l' active) que tu formates.

Ne serait-ce pas plutôt ce que tu cherches ?

Sheets("donnes").Select <---> cette ligne n'est pas nécessaire

Dim i As Integer 
Dim j As Integer 

i = 10 
j = 2 

While Cells(i, 3).Value <> "" 
  For j = 1 To 18 
    If sheets("donnes").Cells(i, 3).Value = Sheets("conditions").Cells(i,j).Value Then 
      Sheets("feuille").cells(cellule).Font.Bold = True 
    End If 
  Next 
j = j + 1
i = i + 1 
Wend 

Remplaces les mots soulignés par les adresses voulues (l'avantage de mentionner les noms des feuilles est que ta macro peut s'effectuer depuis n'importe quelle feuille).

Espérant avoir pu t'aider.

Cordialement.
Répondre à Papou93

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
pol_38, le mardi 17 juillet 2007 à 09:54:27
Hello Papou,

Ca bug toujours au meme endroit malgre les modifs...j'ai pourtant egalement modfie le code : For j = 2 To 18, vu que mes conditions commencent a la ligne 2.

Par rapport a tes questions:

1. Je veux passe en gras les cellules de la feuille "donnes", situees ds la colonne C
2. je voulais en incrementant 'j' faire parcourir la liste des 17 "conditions" pour chaque ligne 'i' de la feuille "donnes"

J'essaie de mieux decrire mon cas:

- dans la feuille "donnes", une liste de donnes mises a jour quotidiennement
- dans la feuille "conditions", une liste de 17 donnes constantes inscrites dans les cellules A2->A18
- But = mettre en gras les donnes de la feuille 'donnes' si un d'elle se trouve parmis les 17 de la feuille "conditions"


Merci de ton aide, je debute en VBA et ce n'est pas toujorus evident de trouver des infos :-)

cordialement

Pol
Répondre à pol_38

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Papou93, le mardi 17 juillet 2007 à 12:01:19
Re-bonjour pol,

Tes explications m'ont davantage éclairé, je t'envoie donc une nouvelle version qui fonctionne, je l'ai testée.
Dans cet exemple, les cellules de la feuille 'donnes' sont en colonne 'C', celles de la feuille 'conditions' vont de 'A2' à A18'.
Comme (selon toi) tu débutes, je me suis permis de commenter abondamment le code.
Tu remarqueras également que cette macro fonctionne aussi en cas de modification de cellules déjà renseignées, ce qui n'était pas le cas avant (Rajout d'un 'Else' dans l'If ... Then'.

Private Sub MiseEnGras()
Dim d As Integer ' 1ère occupée sur feuille "donnes"
Dim f As Integer ' dernière ligne occupée sur feuille "donnes"
Dim L1 As Integer ' fait référence aux lignes de la feuille "donnes"
Dim L2 As Integer ' fait référence aux lignes de la feuille "conditions"

' définit la 1ère ligne à analyser sur feuille "donnes"
d = 10

' calcule la dernière ligne occupée sur feuille "donnes"
1 f = Cells(65536, 3).End(xlUp).Row

' 1ère ligne remplie sur feuille "conditions"
j = 2

With Sheets("conditions") ' évite de mentionner le nom de la feuille "conditions"
' dans les références de cellules.
' Ex: .cells(L,C) fait référence à la cellule de ligne 'L' et de colonne 'C'
' de la feuille mentionnée dans le "with"

  For L1 = d To f ' balayage des lignes renseignées sur feuille "donnes"
    For L2 = j To j + 17 ' balayage des lignes renseignées sur feuille "conditions"
      If .Cells(L2, 1) = Cells(L1, 3) Then
        Cells(L1, 3).Font.Bold = True
        Exit For ' sort de la boucle à la 1ère condition remplie (évite de perdre du temps)
        Else
        Cells(L1, 3).Font.Bold = False
      End If
    Next
  Next
End With

End Sub


J'ai nommé cette macro 'MiseEnGras', et tu peux l'exécuter automatiquement en la rangeant dans l'événemént 'SelectionChange' de la feuille 'dooes' par exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MiseEnGras

End Sub


ou en la mettant dans l'événement 'Click' d'un bouton de commande.

Espérant cette fois avoir tout compris.

Cordialement.
Répondre à Papou93

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
pol_38, le mercredi 18 juillet 2007 à 18:24:05
Salut Papou,

Super ca marche a la perfection, et en plus en un temps record pour un fichier de pres de 10Mb et comportant + de 1000 lignes!

Un tout grand merci, non seulement ca marche mais en plus tes explications precises m'ont permis de bien comprendre le fonctionnement de ce code!

Autre petite question: connais des sites, parutions, livres etc. qui peuvent m'aider a progresser en VBA (surtout pour l'espect base de donnees)??

Avec nottament des exemples de codes commentés, ce qui est vraiment le top pour bien comprendre?

Cordialement

Pol
Répondre à pol_38

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Papou93, le mercredi 18 juillet 2007 à 20:26:38
Bonsoir Pol,

Voici rapidement 3 bons sites sur Ecxel et VBA :

http://www.cathyastuce.com/excel.htm
http://dj.joss.free.fr/
http://www.info-3000.com/vbvba/index.php

Ainsi que 2 ouvrages que je possède :

- Excel et VBA des Éditions CampusPress
- VBA pour microsoft Office pour las Nuls
mais il en existe bien d'autres que l'on trouve aisément sur le marché(certains hypermarchés, Fnac ...).
Une piste à explorer également, si ta commune en possède une : la bibliothèque communale.

Pour ma part, après des débuts difficiles, je me suis surtout autoformé en pratiquant l'enregistreur de macros d' Excel, ainsi qu'en consultant des forums au hasard (c'est ainsi que je suis tombé sur celui-ci, qui soit-dit en passant, est l'un des meilleurs).

Bonne recherche et bon courage (pratiquer, toujours pratiquer !)

Cordialement.
Répondre à Papou93
Logiciels pertinents trouvés dans les téléchargements
Télécharger HP USB Disk Storage Format Tool 2.0.6HP USB Disk Storage Format Tool - HP USB Disk Storage Format Tool est un petit utilitaire permettant de formater une clé USB ou un lecteur MP4 . Il permet...Catégorie: Formatage/Partitionnement
Licence: Freeware/gratuit
Télécharger Switch Sound Format Converter 1.05Switch Sound Format Converter - Switchest un convertisseur de formats audio pour Windows ou Mac, capable de convertir des fichiers audio à partir de...Catégorie: Conversion audio
Licence: Freeware/gratuit
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger OpenOffice.org 2.4.1OpenOffice.org - OpenOffice est une suite bureautique complète entièrement gratuite, compatible avec la suite Microsoft Office. Elle...Catégorie: Suite bureautique
Licence: Open Source
Plus de logiciels gratuits sur « [VBA excel] mise en forme conditionnelle »