Condition division

Résolu
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 - 30 mars 2010 à 11:27
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010 - 30 mars 2010 à 15:05
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

rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 14:59
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 !
3
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 11:32
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
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 12:20
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.
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 13:09
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é !
0

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

Posez votre question
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 13:26
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.
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 13:38
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
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 13:48
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à ?
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 13:49
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.
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 13:54
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 ?
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 14:00
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.
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 14:07
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.
0
Utilisateur anonyme
30 mars 2010 à 14:10
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
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 14:13
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").
0
rafou29 Messages postés 29 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 14 avril 2010 1
30 mars 2010 à 14:32
Que veux-tu dire par renommer le nom de mes range ?
0
daffy17 Messages postés 106 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 22 avril 2010
30 mars 2010 à 15:05
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.
0
Rejoignez-nous