[Catégorie encore modifiée .Net --> VBA] si case vide alors faire un calcul à pa

Résolu
dru345 Messages postés 11 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 19 novembre 2010 - 13 sept. 2010 à 09:30
dru345 Messages postés 11 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 19 novembre 2010 - 14 sept. 2010 à 09:12
Salut à tous.

Alors voila ce que j'aimerai faire:

Si j'ai une case vide Q2 alors Q2=Cte*R2.

Mais le probleme c'est que je veux ca sur la colonne Q mais pas jusqu'en bas. Par exemple, un jour mon tableau pourra aller de Q2 à Q14, le lendemain de Q2 à Q23... il commencera toujours à Q2.
Et du coup, en Q20 par ex, je voudrasi Q20= 0,85*R20

J'ai cherché sur le forum, avec des if, until... mais je m'en sors pas.

Merci

See you

7 réponses

c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
13 sept. 2010 à 14:05
A essayer

Function test()
i = 2
nblignes = Sheets("input").Range("q65536").End(xlUp).Row
Do While i <= nblignes
If IsEmpty(Sheets("input").Cells(i, 17)) Then
Cells(i, 17).Value = 85 / 100 * Cells(i, 18).Value
End If
i = i + 1
Loop

End Function
3
c148270 Messages postés 303 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 3 octobre 2013 1
13 sept. 2010 à 09:55
Bonjour

je suppose que "pas jusqu'en bas" signifie : ne pas aller au-delà de la dernière lignes renseignées
Voici ce qui permet de connaitre le nombres de lignes totales utilisées
nblignes = Sheets("feuil1").Range("q65536").End(xlUp).Row

Ceci fonctionne jusqu'à excel 2003.
Voir le nombre de lignes maxi pour les autres versions.

Bonne journée
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 sept. 2010 à 10:01
Salut
Tu n'as pas dû beaucoup chercher parce que ce genre de boucle apparait dans beaucoup et beaucoup de codes en VBA (tu ne fais pas de VB.Net mais du VBA)
    Dim maCellule As Range
    For Each maCellule In ActiveSheet.Range(Range("D1"), Range("D1").End(xlDown))
        If IsEmpty(maCellule) Then
            maCellule.Value = 4012 * maCellule.Offset(0, 1).Value
        End If
    Next

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 la partage (Socrate)
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
13 sept. 2010 à 10:08
Salut,

Tu dois tester la colonne "R"
Si une valeur est présente dans la colonne R
Alors Q# = 0,85 * R#



HellAngel777
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
0

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

Posez votre question
dru345 Messages postés 11 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 19 novembre 2010
13 sept. 2010 à 13:38
Merci,

Tout marche sauf qu'il va jusqu'en bas de la page.

Sub ComboBox11_Change()

Sheets("Input").Select
Range("Q2").Select

Dim Q2 As Range
For Each Q2 In ActiveSheet.Range(Range("Q2"), Range("Q2").End(xlDown))
If IsEmpty(Q2) Then
Q2.Value = 85 / 100 * Q2.Offset(0, -1).Value

nblignes = Sheets("input").Range("P65536").End(xlUp).row

End If
Next


End Sub

Je veux qu'il s'arrete à la dernier ligne rempli dans la colonne P. J'ai essayé en mettant la ligne nblignes=... mais ca ne change rien.

Merci

Hadrien
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 sept. 2010 à 19:53
Pourquoi parles-tu du contenu de la colonne P alors qu'initialement, c'était la colonne Q ?
Pourquoi multiplies-tu la cellule de la colonne Q avec le contenu de la colonne précédente alors que tu veux utiliser R, c'est à dire la colonne suivante ?

nblignes = Sheets("input").Range("P65536").End(xlUp).row
n'a aucun sens dans ta boucle.
Est-ce que tu as compris comment fonctionnait les boucles For ?

Pas logique, tout ça.

Dernière aide :
Le débogage :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
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 pour avancer d'une ligne de code
- F5 pour continuer normalement
0
dru345 Messages postés 11 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 19 novembre 2010
14 sept. 2010 à 09:12
Désolé je mettais emmeler les pinceaux.

En fait, je veux bien multiplier par la colonne précédente c'est à dire P et non R.

D'ou: nblignes = Sheets("input").Range("P65536").End(xlUp).row
Mais ca ne marchait pas.

Cependant, Merci à c148270 car maintenant ca marche.
0