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

Signaler
Messages postés
11
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
19 novembre 2010
-
dru345
Messages postés
11
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
19 novembre 2010
-
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

Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013

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
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
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)
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
1
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
Messages postés
11
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
19 novembre 2010

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
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
Messages postés
11
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
19 novembre 2010

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.