MACRO BOUCLE WHILE IF THEN ELSE

Fermé
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011 - 8 nov. 2011 à 12:48
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011 - 10 nov. 2011 à 09:59
Bonjour,

Je voudrais écrire une macro par laquelle Excel test les valeurs des cellules de la première ligne de mon tableau et une fois arrivé sur une valeur déterminée m'affiche X par exemple dans la cellule B1.


Merci

A voir également:

16 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 8/11/2011 à 13:05
Bonjour,
Il n'est pas utile de boucler sur chaque cellule d'une ligne pour trouver une valeur recherchée. Tu peux regarder du côté de la méthode find.
Un exemple pour chercher "Prénom" dans la ligne 1 :
Sub cherche() 
Dim Trouve As Range 
Dim Valeur_cherchee As String 

Valeur_cherchee = "Prénom" 
    Set Trouve = ActiveSheet.Rows(1).Cells.Find(what:=Valeur_cherchee) 
        If Trouve Is Nothing Then 
            MsgBox "Pas trouvé" 
        Else 
            MsgBox "Prénom trouvé en cellule : " & Trouve.Address
        End If 
Set Trouve = Nothing 
End Sub

Cordialement,
Franck P
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 13:21
J'essaie de suite, merci beaucou
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 13:22
Et pour afficher une valeur dans une cellule quand le résultat est atteint et non une message box, vois-tu une solution?

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 nov. 2011 à 13:29
Bien sur....
Si tu veux un "X" en B1 :
Remplace :
MsgBox "Prénom trouvé en cellule : " & Trouve.Address

Par :
[B1] = "X"

Si tu veux un "X" sous la cellule ainsi trouvée en ligne 2 :
Remplace :
MsgBox "Prénom trouvé en cellule : " & Trouve.Address

Par :
Trouve.Offset(1, 0) = "X"
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 13:31
Une autre petite question:

Si la valeur à chercher est le résultat d'une fonction?

s'il s'agit d'une suite de dates dans laquelle trouver aujourdhui()?


Comment procéder?
0

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

Posez votre question
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 13:33
Je suis impressionné par ta réactivité
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 13:34
est-il possible de faire les deux:

Message box + B1?
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
8 nov. 2011 à 13:37
Evidemment :-)
'suffit de laisser les deux lignes et les deux seront exécutées
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 nov. 2011 à 13:46
Pour chercher une date attention!!!
Si dans ta ligne 1 les dates sont au format "date", il faudra que tu cherchers un "Valeur_Cherchée" au même format, c'est à dire en "date"...
Exemple :
Dim Valeur_cherchee As String
Valeur_cherchee = Date
    Set Trouve = ActiveSheet.Rows(1).Cells.Find(what:=Valeur_cherchee)

Ne trouvera rien si dans la ligne 1 sont saisies des dates au format date.
par contre :
Dim Valeur_cherchee As Date
Valeur_cherchee = Date
    Set Trouve = ActiveSheet.Rows(1).Cells.Find(what:=Valeur_cherchee)

trouvera ce que tu cherches...
Dans la ligne : Valeur_cherchee = Date, Date est l'équivalant VBA de AUJOURDHUI()...
Et effectivement comme le dis si bien Mihawk (que je salues au passage), pour afficher le message ET écrire "X" en B1, il suffit de laisser les deux lignes. Exemple :
Sub cherche()
Dim Trouve As Range
Dim Valeur_cherchee As Date

Valeur_cherchee = Date
    Set Trouve = ActiveSheet.Rows(1).Cells.Find(what:=Valeur_cherchee)
        If Trouve Is Nothing Then
            MsgBox "Pas trouvé"
        Else
            MsgBox "Date trouvée en cellule : " & Trouve.Address
            [B1] = "X"
        End If
Set Trouve = Nothing
End Sub
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 14:44
TOUT SIMPLEMENT GENIAL
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 14:57
Une dernière question:
Existe-t-il un équivalant maintenant()?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 nov. 2011 à 15:08
Oui.
Now
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 15:13
Et peut-on rechercher une valeur numérique positive?
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 15:19
Il me semble alors devoir modifier:

Dim Valeur_cherchee As Date?

Par quelle expression?
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 15:26
En fait, je cherche une macro qui afficherai une valeur ou une message box comme on l'a vu avant mais au moment ou la valeur de =maintenant() (par exemple: 14:05) dans la cellule A1 deviendrait supérieure à celle d'une cellule A2 donnée par:

5 minutes après


......

Je pense que je deviens lourd là............
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 nov. 2011 à 16:28
Non tu n'es pas lourd................................
Je n'ai juste rien compris.
Comment veux tu que Now soit supérieur à maintenant + 5 min...
Comme je n'ai rien compris tu va tout ré-expliquer clairement.
Dans ta feuille il faut nous dire :
- ce que tu saisis,
- dans qu'elles cellules tu fais ces saisies,
- qu'elles sont les formules que tu utilises,
- ou sont ces formules,
- les formats appliqués à chacune de ces cellules (formules et saisies...),
- ce que tu souhaites obtenir...
Différencie bien les saisies "classiques" des formules.
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 15:26
Bien sur, j'actualise le =maintenant() par F9 avant de lancer la macro
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 17:00
En fait j'ai changé le fond de ma question en cours de route sans faire attention à expliciter la nouvelle, c'était un peu au fil de ma pensée

- On oublie Now avec ma première question sur la valeur cherchée

- Maintenant j'essaie de faire une macro qui reprend les questions suivantes


Dans A1: =maintenant() (Ex: 16:00:00) (mais maintenant est exprimé en jjmmaaa hh:mm:ss, je ne voudrais que hh:mm:ss pour la suite)

Dans A2: =16:05:00 (dans cet exemple)

MACRO => ouverture d'une message box (il est l'heure, par exemple) quand =maintenant() devient égale à 16:05:00 en précisant que j'actualise le =maintenant() en pressant F9 avant de lancer la macro

J'espère avoir été plus clair comme ça


Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 nov. 2011 à 17:06
Sub test()
If CDate(Date) + CDate(Range("B1")) < CDate(Range("A1")) + CDate("00:05:00") Then
    MsgBox "c'est l'heure"
Else
    MsgBox "c'est pas encore l'heure faignasse"
End If
End Sub
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 17:08
LOL la deuxième message box!!!!!!!
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
8 nov. 2011 à 17:04
Avec les opérations sur les heures qui me paraissent complexes et le problème de passer de maintenant (jjmmaaaa hh:mm:ss) à 16:05:00 en hh:mm:ss, je pense utiliser une cellule, disons A3 pour tenter de soustraire ces deux heures pour obtenir une valeur en format standard qui sera alors une valeur positive ou négative, je chercherais donc à afficher cette message box quand A3 deviendrait négative.

Si cette démarche est la plus simple, sinon, je suis preneur de toute autre solution......
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
9 nov. 2011 à 08:36
Salut,
Quel est le but exact de cette procédure?
Sinon avec A3 en format nombre (ou standard) :
Sub test()
If [A3] < 0 Then
    MsgBox "c'est l'heure"
Else
    MsgBox "c'est pas encore l'heure faignasse"
End If
End Sub
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
9 nov. 2011 à 15:41
Une autre question pour aujourd'hui:

- J'ai une feuille de calculs assez complexe qui tourne sur les formules de les lois de la gravitation sans aucune macro, je ne travaillais qu'en formules à l'époque;

- Il me semble que les macro sont un outil beaucoup plus puissant qui me permettrait de revisiter mon fichier, il s'agit de déterminer les constantes de départ et de faire tourner les équations selon le principe:

Ma=
Mb=

xa= vxa= x'a=
xb= vxb= x'b=................etc........................

ya=
yb=

- Donc, j'espère qu'il existe un moyen de "passer en macro"


???? convertir les formules en macro??????
???? faire tourner un ensemble de formules en boucle en partant d'une plage de ma feuille??? peut-être de la feuille elle-même?????



MERCI BEAUCOUP D'AVANCE en espérant qu'il me sera possible de m'épargner la fastidieuse tâche de repartir de 0 et de retaper toutes mes formules en macro....................
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
10 nov. 2011 à 07:55
Bonjour,
Pas de souci, tout ou presque est faisable en VBA...
CEpendant, pour le coup, je te recommande d'ouvrir un nouveau sujet. Celui ci est résolu et ton problème d'aujourd'hui pourrait amener d'autres personnes qui t'aideraient. En effet, les nouveaux sujets sont plus lus que les anciens ici...
Par contre, tu devrais être plus précis car là je n'ai rien compris et ne peux rien faire à partir de cette explication...
Il s'agit de déterminer les constantes de départ ==> Comment les détermines tu jusqu'à aujourd'hui?
Puis de faire tourner les équations ==> Quels sont les formules de ces équations? Qu'entends tu par faire tourner?
OK?
0
KOMENCAMARCHE00 Messages postés 26 Date d'inscription mardi 8 novembre 2011 Statut Membre Dernière intervention 10 novembre 2011
10 nov. 2011 à 09:59
J'ai tenté toute l'après midi de créer un nouveau sujet mais n'y suis parvenu que hier soir, d'où ce poste

Je te réponds quand même ici:

- Les constantes de départs, masses de A et B; coordonnées de départ et vitesses de départ, idem;

- Après, j'ai mais formules qui déterminent (avec un pas que je détermine aussi) l'accélération entre les deux corps puis les nouvelles coordonnées, puis les nouvelles vitesses.....

Dans la première colonne de mon tableau j'ai les constantes initiales, dans une deuxième, les accélérations dans une troisième les nouvelles vitesses et encore une colonne pour les nouvelles coordonnées ETC.......

A chaque fois, des formules entre les grandeurs donnent les accélérations puis de nouvelles vitesses puis de nouvelles coordonnées en x et y.....

Suis-je plus clair?


MErci
0