Besoin d'aide VBA

Fermé
marxia - 13 févr. 2009 à 11:44
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 19 févr. 2009 à 09:05
Bonjour,

Voila j'ai un tableau avec 5 colonnes. dans la première colonne je dois vérifier que les valeurs sont numériques sinon les surligner. pour la 3ème colonne je dois mettre en évidence les celulles vides dans la 4ème colonne je dois vérifier que les valeurs soient dans un intervalle donné et si y en a une qui n'est pas dans l'intervalle surligner la celulle.
Je suis débutante en visual basic j'avais déjà programmé quelque chose mais c'était une calculatrice( assez simple) et c'était il y a longtemps! c'est assez urgent et je ne sais pas du tout comment faire!

15 réponses

xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
13 févr. 2009 à 11:52
Tu es oblige de le faire par macro vba?
pk tu peux le faire tout simplement avec Excel!
0
C'est un travail qu'on ma donné à faire et ils veulent appuyer sur un bouton et que tt se fasse automatiquement
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 févr. 2009 à 12:08
Bonjour,
Il y a moyen de le faire automatiquement SANS bouton, sans rien, juste avec une MFC
A+
0
je ne sais pas faire de MFC
0

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

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 févr. 2009 à 13:17
MFC = Mise en forme conditionelle
Tu sélectionne la colonne 3
>> Format >> Mise en forme conditionelle >> tu sélectionne >> la cellule est égale >> et tu met 0
Colonne 5
>> Tu sélectionne N'est pas comprise et tu tape tes bornes
Pour la 1, je retrouve plus comment incorporer la fonction ESTNUM().. Peut-être wilfried ?
A+
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
13 févr. 2009 à 13:29
Bonjour à tous

Selectionner la plage A2:A20 de la 1ere colonne
Menu Format / Mises en Forme Conditionnelle
Choisir : La formule est
la Formule : =Non(EstNum(A2))
cliquer le bouton format pour choisir le format des cellule à appliquer

pour la 3eme colonne
meme manip
s'il y a des formules dans les cellules mettre la formule suivante
=C2=""
si ce sont des cellules saisies mettre la formule suivante
=EstVide(C2)

pour la 4eme colonne selon in interval : probleme ou se trouvent les données
exemple : borne inferieure : en cellule A1, Borne superieure : en cellule B1
meme manip
la formule : =et(D2>=$A$1;D2<=$B$1)

si probleme : joindre un fichier : suivre ce lien : https://www.cjoint.com/ charger le fichier et poster le lien donné par le site dans le reponse
0
Merci je vais essayer
0
Merci beaucoup j'ai fait ce que vous m'avez dit et ca va super bien!
Parcontre j'ai de nouveaux macros à faire: j'ai une colonne avec une date et l'heure de la forme: 2009-02-15 00:00:00 et j'ai 3 autres colonnes avec l'année le mois et le jour et cela doit correspondre à la date de la colonne précedente. Je doit faire le macro afin de vérifier!
merci
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
17 févr. 2009 à 07:48
Tu prend le contenu de la premiere colonne et tu applique les fonctions Day Month et Year dessus et apres tu compare avec les cellules suivantes ;)
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 243
17 févr. 2009 à 09:24
Re:

exemple : ta date en colonne A, ton année en colonne B, ton mois en colonne C, ton jour en colonne D
tu appliques une mise en forme conditionnelle : Selection de la plage : Menu Format / Mise en Forme conditionnelle

dans la fenetre MFC, tu choisis la Formule est : et tu tapes à droite de ce choix

=Ou(annee($A2)<>$B2;Mois($A$2)<>$C2;Jour($A2)<>$D2)
click sur le bouton format et choisis un format d'affichage (exemple fond rouge)
tu valides

il aurait été plus simple de mettre des formules plutôt que de refaire saisir tout
en colonne B (selon enoncé ci-dessus), = annee($A2)
en colonne C =Mois($A2)
en colonne D = Jour($A2)

je ne sais pas pourquoi faire ces 3 colonnes, mais (là c'est à titre personnel) elle ne sont peut etre pas utiles
0
j'ai un autre problème! j'ai fais une boucle avec plusieurs instructions mais en faisant un débeugage par étape je me suis rendu compte d'un probleme quand une condition est vérifiée la première fois, la deuxième fois c'est pareil même si il y une erreur et que c'est l'autre condition qui devrait être vérifiée. je sais pas si je me suis bien comprendre j'ai un peu de mal à m'expliquer. Voila mon code j'ai mis en remarque les contrôle que j'effectue. Dans une autre feuille je note tous les résultats (le nombre de celulle différent de 0, égal à 0...)

Sub Contrôle()


'initialisation des var

ligne = 2
listenul = 0
listenonnul = 0
cbprimaire = 0
cbsecondaire = 0
nul = 0
nonnul = 0
cmde = 0
cmdefaux = 0
nbcommande = 0
nbcommandefaux = 0
numnul = 0
numnonnul = 0
numbon = 0
numfaux = 0




Set cb = Worksheets("BDD").Cells(ligne, 1)
Set numlist = Worksheets("BDD").Cells(ligne, 9)
Set commande = Worksheets("BDD").Cells(ligne, 11)
Set lign = Worksheets("BDD").Cells(ligne, 12)
Set art = Worksheets("BDD").Cells(ligne, 17)

'boucle toutes les lignes
Do Until cb = 0


'controle du cb prim

If Left(cb, 1) = 1 Then
cbprimaire = cbprimaire + 1
Else
cbsecondaire = cbsecondaire + 1
End If

'controle du num liste

If numlist = 0 Then
listenul = listenul + 1
Else
listenonnul = listenonnul + 1
End If

'contrôle du numéro de commande

'différent de 0
If commande = 0 Then
nul = nul + 1
Else
nonnul = nonnul + 1
End If

'commence par un 8 ou un 9
If Left(commande, 1) = 8 Or 9 Then
cmde = cmde + 1
Else
cmdefaux = cmdefaux + 1
End If

'comporte 9 chiffres
If Len(commande) = 9 Then
nbcommande = nbcommande + 1
Else
nbcommandefaux = nbcommandefaux + 1
End If

'contrôle ligne

'différent de 0
If lign = 0 Then
numnul = numnul + 1
Else
numnonnul = numnonnul + 1
End If

'dernier chiffre=0
If Right(lign, 1) = 0 Then
numbon = numbon + 1
Else
numfaux = numfaux + 1
End If

'contrôle art_pf

'commence par H, B, A ou X



Set cb = Worksheets("BDD").Cells(ligne, 1)
ligne = ligne + 1

Loop


'résultats

Worksheets("résultats").Cells(1, 2) = ligne
Worksheets("résultats").Cells(2, 2) = cbprimaire
Worksheets("résultats").Cells(3, 2) = cbsecondaire
Worksheets("résultats").Cells(5, 2) = listenul
Worksheets("résultats").Cells(6, 2) = listenonnul
Worksheets("résultats").Cells(8, 2) = nul
Worksheets("résultats").Cells(9, 2) = nonnul
Worksheets("résultats").Cells(10, 2) = cmdefaux
Worksheets("résultats").Cells(11, 2) = cmde
Worksheets("résultats").Cells(12, 2) = nbcommandefaux
Worksheets("résultats").Cells(13, 2) = nbcommande
Worksheets("résultats").Cells(15, 2) = numnonnul
Worksheets("résultats").Cells(16, 2) = numnul
Worksheets("résultats").Cells(17, 2) = numbon
Worksheets("résultats").Cells(18, 2) = numfaux


End Sub
0
et j'ai une autre question: à la fin de ma boucle(qui ne marche toujours pas!) j'affiche un msgbox "contrôles terminés" et je veux que quand je clique sur ok , la feuille "résultat" s'ouvre. Et si j'ai pas été assez clair pr ma question du dessus n'hésitez pas à me le dire j'essayeré de le vous expliquer mieux ou de donner plus de détail!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 févr. 2009 à 12:34
Bonjour,
Je n'ai pas tout les renseignement mais une piste...
Sub Contrôle()

'initialisation des var

ligne = 2
'Quand arrive dans une sub, les variables SONT DEJA A ZERO
'listenul = 0
'listenonnul = 0
'cbprimaire = 0
'cbsecondaire = 0
'nul = 0
'nonnul = 0
'cmde = 0
'cmdefaux = 0
'nbcommande = 0
'nbcommandefaux = 0
'numnul = 0
'numnonnul = 0
'numbon = 0
'numfaux = 0





    'boucle toutes les lignes
    Do Until cb = 0
        With Worksheets("BDD")
            cb = .Cells(ligne, 1)
            numlist = .Cells(ligne, 9)
            commande = .Cells(ligne, 11)
            lign = .Cells(ligne, 12)
            art = .Cells(ligne, 17)
        End With
        'controle du cb prim
        If Left(cb, 1) = 1 Then
            cbprimaire = cbprimaire + 1
        Else
            cbsecondaire = cbsecondaire + 1
        End If

        'controle du num liste

        If numlist = 0 Then
            listenul = listenul + 1
        Else
            listenonnul = listenonnul + 1
        End If

        'contrôle du numéro de commande

        'différent de 0
        If commande = 0 Then
            nul = nul + 1
        Else
            nonnul = nonnul + 1
        End If

        'commence par un 8 ou un 9
 'IL FAUT METTRE LA CONDITION 2 FOIS
        If Left(commande, 1) = 8 Or Left(commande, 1) = 9 Then
            cmde = cmde + 1
        Else
            cmdefaux = cmdefaux + 1
        End If

        'comporte 9 chiffres
        If Len(commande) = 9 Then
            nbcommande = nbcommande + 1
        Else
            nbcommandefaux = nbcommandefaux + 1
        End If

        'contrôle ligne
        
        'différent de 0
        If lign = 0 Then
            numnul = numnul + 1
        Else
            numnonnul = numnonnul + 1
        End If

        'dernier chiffre=0
        If Right(lign, 1) = 0 Then
            numbon = numbon + 1
        Else
            numfaux = numfaux + 1
        End If

'contrôle art_pf

'commence par H, B, A ou X
        ligne = ligne + 1
Loop


'résultats
    With Worksheets("résultats")
        .Cells(1, 2) = ligne
        .Cells(2, 2) = cbprimaire
        .Cells(3, 2) = cbsecondaire
        .Cells(5, 2) = listenul
        .Cells(6, 2) = listenonnul
        .Cells(8, 2) = nul
        .Cells(9, 2) = nonnul
        .Cells(10, 2) = cmdefaux
        .Cells(11, 2) = cmde
        .Cells(12, 2) = nbcommandefaux
        .Cells(13, 2) = nbcommande
        .Cells(15, 2) = numnonnul
        .Cells(16, 2) = numnul
        .Cells(17, 2) = numbon
        .Cells(18, 2) = numfaux
        .Select
    End With

End Sub

A+
0
j'ai une autre question: à la fin de ma boucle j'affiche un msgbox "contrôles terminés" et je veux que quand je clique sur ok , la feuille "résultat" s'ouvre.

lermite222: merci pr ton aide ca marche!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
19 févr. 2009 à 09:05
De la façon que j'ai fait, à la fin de la macros, la page Résultat est sélectionnée.
Clic sur OK après le msg et tu est dans la bonne feuille.
0