Condition division

[Résolu]
Signaler
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
-
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010
-
Bonjour,

Je souhaiterais pouvoir calculer avec ma macro le rapport entre deux de mes colonnes que je multiplie par cent pour l'avoir en pourcentage.

Mon problème est qu'il me calcule les bonnes valeurs tant que mes colonnes "D" et "R" contiennent des valeurs mais lorsque mes deux colonnes sont vides, il continue alors que je voudrais qu'il stoppe.

Voici mon code :

Private Sub CommandButton53_Click()

Sheets("Sheet1").Select

Dim y, z, x

y = Range("D2" & i).Value 
z = Range("F2" & i).Value 

x = y / z 

Range("R2" & i) = x * 100

Next i
End Sub


Merci de votre attention

15 réponses

Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Après beaucoup de problème et deux plantages d'Excel, voici le code qui fonctionne (je ne pourrais pas vous dire pourquoi, ni comment...)

Private Sub CommandButton53_Click()

Sheets("Sheet1").Select

For i = 2 To 65536

Dim y, z, x

y = Range("D" & i).Value
z = Range("F" & i).Value
If (y "" And z "") Then
  Exit For
End If
x = y / z

Range("R" & i) = x * 100

Next i
End Sub



Je tiens à vous remercier de votre aide et en particulier daffy17 pour sa patience vis à vis de mes nombreux pépins !
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Dsl j'avais supprimé par inadvertance ma boucle for.

Private Sub CommandButton53_Click()

Sheets("Sheet1").Select

For i = 2 To 65536

Dim y, z, x

y = Range("D2" & i).Value 
z = Range("F2" & i).Value 

x = y / z 

Range("R2" & i) = x * 100

Next i

End Sub
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

Bonjour rafou29, il suffirait de rajouter une condition "si" en indiquant que si les deux colonnes sont vides on stop la boucle.
Le plus propre reste quand même la boucle while, qui boucle tant que la condition est vrai
Private Sub CommandButton53_Click()
Dim y, z, i

i = 2
y = Range("D" & i).Value
z = Range("F" & i).Value

Sheets("Sheet1").Select

'Tant que les deux colonnes ne sont pas vides, on effectue le traitement
While (y <> "" Or z <> "")
    'Si le diviseur est vide ou egal à 0, on ne fait pas la division (division impossible par 0)
    If (z <> "" And z <> 0) Then
        'Si y est vide, on remplace la valeur par 0
        If (y = "") Then
            y = 0
        End If
        'On ajoute la valeur du calcul à la cellule de la même ligne
        Range("R" & i) = (y / z) * 100
    End If
    
    'On incrémente le compteur
    i = i + 1
    'On modifie les prochaine valeur à calculer
    y = Range("D" & i).Value
    z = Range("F" & i).Value
Wend
End Sub

Tu avais indiqué dans ton code des valeur "D2","F2" et "R2" pour les "range" alors que tu les incrémentaient avec i, j'ai donc supprimer le numéro de ligne "2" pour que les résultats des calculs soient mise sur la même ligne.
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
J'ai testé ton code mais j'ai un msg d'erreur au niveau du calcul

Range("R" & i) = (y / z) * 100

"Identifier under cursor is not recognized"


Pourtant il me semble que toutes les variables ont bien été déclaré !
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

Essaye de préfixer le Range avec le nom de ta feuille et d'ajouter la valeur à l'attribut value de la plage.
Sheets("Sheet1").Range("R" & i).value = (y / z) * 100


J'ai testé en local avant de t'envoyer le code et je n'ai pas eu ce message d'erreur.
Donc ce doit être surement lié à ta feuille excel.
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Sa ne marche pas plus en ajoutant ton idée mais maintenant il me dit que :

"Cannot jump to Range because it is hidden"

Quelle galère VBA, tu trouves une solution à un problème et tu en as tout de suite un autre qui se présente
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
You specified a name that is in the type library, but it is marked as hidden. 
You cannot normally view hidden type library members. Choose Show Hidden Members on the object browser context menu to make hidden members visible. You can then view the member information.



Quelqu'un peut-il m'expliquer ce que veut dire l'aide par là ?
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

As-tu moyen d'uploader ton fichier excel sur http://dl.free.fr/ et de me faire part du lien par message privé.
A moins que celui ne contienne des informations confidentiels.
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Dsl mais je ne peux pas car les informations qu'il contient sont confidentielles (histoire de simplifier les choses ...)

Tu n'aurais pas autrement une autre solution à tout hasard ?
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

Tu peux toujours réessayer avec ton code de départ en rajoutant une contrainte et une sortie de boucle si les deux cellules sont vides.
Private Sub CommandButton53_Click()

Sheets("Sheet1").Select

Dim y, z, x

y = Range("D2" & i).Value 
z = Range("F2" & i).Value 
If (y "" And z "") Then 
  exit for
end if
x = y / z 

Range("R2" & i) = x * 100

Next i
End Sub


Je pense que les erreurs que tu à cité ci-dessus doivent être liée à des colonnes que tu as masquées et qui doivent être inaccessible en lecture/écriture.
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Je suis d'accord avec toi mais mon niveau ne me permet pas de les corriger.

Bonne nouvelle ... le code ne plante pas !
Mauvaise nouvelle ... il ne m'affiche plus rien !

Je dois avoir un mauvais karma car avec mon code préhistorique tout fonctionnait (certes mal) et maintenant tout va de travers.
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
4
Bonjour,

Une autre solution:

Private Sub CommandButton53_Click()
Sheets("Sheet1").Select
Dim i as integer = 2
While cells(4,i)<> "" and cells(6,i)<> ""
Dim y, z, x

y = Range("D2" & i).Value
z = Range("F2" & i).Value

x = y / z

Range("R2" & i) = x * 100

i = i + 1
Wend
End Sub
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

Désolé ça doit être une erreur de ma part, j'ai repris ton premier code source ou la boucle for n'était pas présente.
Private Sub CommandButton53_Click()

Sheets("Sheet1").Select

For i = 2 To 65536

Dim y, z, x

y = Range("D2" & i).Value
z = Range("F2" & i).Value
If (y "" And z "") Then
  Exit For
End If
x = y / z

Range("R2" & i) = x * 100

Next i


Cependant pense à vérifier si tu dois ou ne dois pas renommer le nom de tes Range contenant le numéro de ligne ("D2","F2","R2").
Messages postés
29
Date d'inscription
lundi 8 mars 2010
Statut
Membre
Dernière intervention
14 avril 2010
1
Que veux-tu dire par renommer le nom de mes range ?
Messages postés
106
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
22 avril 2010

De rien rafou, j'avais un peu de temps à passer cet après midi.
Quand je parlais de tes range, je parlais d'enlever le "2" que tu avais mis avant la lettre de ta colonne. Ce que tu as modifié dans l'exemple ci-dessus.

Bonne continuation en VBA Excel.