Addition cellules decimales dans variable

daumal

XLDnaute Nouveau
Bonjour à tous,

Je vous expose mon problème, très simple mais qui me bloque pour non connaissance basique sur ce cas.

Je desire recuperer (en VBA) sur une feuille, des cellules (valeurs entieres et (ou) decimales) que je vais totaliser dans une variable et afficher ainsi, la somme pour une recap.

Jusqu'à là pas de problème.

Pour recuperer les valeurs des cellules j'ai une boucle FOR I ... next I

Je declare un tableau dim data(10) As Double

Ma boucle For I me permet de cumuler les valeurs des cells(i,J+3) (valeurs numériques) tel que : data(I)=data(I) + cells (i,J+3)

Le probleme, j'obtiens une errer d'execution 13 pour incompatibilité de type.

Si je fais comme ci dessous, c'est OK, cela fonctionne mais j'obtiens que des valeurs entières.

Je lis verticalement (for I = 6 to xxx) jusqu'à trouver un indicateur "vrai" qui me permet de recuperer le numero de ligne pour pouvoir recolter les valeurs à additionner de cette ligne.

La recolte des datas
.....
.....
.....
For i = 6 To 130
If Cells(i, 10) = chantier(Y) Then
For J = 1 To 5
data(J) = data(J) + Val(Cells(i, J + 3))
Next J
End If
Next i

Affichage et ecriture sur une feuille
...
...
...
Sheets("vent").Select
For J = 2 To 6
Cells(Y + 6, J) = data(J - 1)
Next J
Next K 'fin boucle K
For J = 1 To 5
data(J) = 0
Next J

Y = Y + 1
Next X 'fin boucle chantier

En gros, si mes commentaires sont compréhensibles, comment afficher les valeurs entières ou decimales car je n'arrive pas à comprendre l'erreur de formatage des données.

Les cellules sont formater en decimales avec affiche du type "0,00" pour 2 decimales.

En l'attente, merci pour vos connaissances au sein de cette base de données qu'est Excel Download donc je fais reference sur ERCI Informatique.
 

Modeste

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

Salut daumal, le forum,

Dans l'aide en ligne, je trouve:
Note La fonction Val ne reconnaît que le point comme séparateur décimal (.). Lors de l'utilisation d'autres séparateurs décimaux (applications internationales, par exemple), convertissez la chaîne en nombre à l'aide de la fonction CDbl.

Ceci dit, l'utilisation de Val se justifie-t-elle dans ton cas ?

Modeste
 

daumal

XLDnaute Nouveau
Re : Addition cellules decimales dans variable

Merci pour ce debut de reponse.
Non, la fonction VAL n'est pas indispensable, puisque j'ai des valeurs numeriques (entiers et decimales) mais je teste avec val au cas ou...
Mais si je mets CDbl ) la place de VAL, j'ai une erreur 13, incompatibilité de type.

Dans le cas de la boucle suivante c'est OK mais j'obtiens que les valeurs entières avec pour affichage par exemple, 12,00 et normalement les decimales devraient etre 12,75

For J = 1 To 5
data(J) = data(J) + Val(Cells(i, J + 3))
Next J

En l'attente, je te remercie
 

Modeste

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

bonsoir daumal,

Si la fonction Val n'est pas nécessaire, pourquoi ne pas simplement écrire:
Code:
Data(J) = Data(J) + Cells(i, J + 3).Value
... ça devrait fonctionner, me semble-t-il.

Modeste
 

daumal

XLDnaute Nouveau
Re : Addition cellules decimales dans variable

Merci de votre réponse.
Avec Data(J) = Data(J) + Cells(i, J + 3).Value, j'obtiens l'erreur 13 c-a-d incompatibilite de type.
C'est la première chose que j'avais fais et a la vue de cette erreur, je cherche toujours une solution.

Pourtant mes valeurs en cellule sont bien de type numérique et j'aobtiens à l'affichage sur un autre tableau, des valeurs entiéres où les décimales ne sont pas additionnées.
Par exemple la cellule contient bien 12.75 et data(2) qui correspond à cette cellule m'affiche 12.00. Les decimales ne sont pas prises en compte pour l'addition.
 

eriiic

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

Bonsoir,

Tu devrais faire un fichier avec l'erreur et le déposer ici.
Je crois qu'on est nombreux à ne pas avoir envie d'en construire un pour s'apercevoir qu'on ne reproduit pas ton erreur.

eric
 

daumal

XLDnaute Nouveau
Re : Addition cellules decimales dans variable

Voici le fichier incriminé


Sub ventilation1()
Dim i As Integer, J As Integer, K As Integer, X As Integer, Y As Integer
Dim data(5) As Integer, chantier(12) As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'************************
'initialisation variables
'************************
For J = 1 To 5
data(J) = 0
Next J
'****tableau
Sheets("VAR").Select
For Y = 1 To 12
chantier(Y) = Cells(Y + 1, 1)
Next Y
'***********************************************
'boucle X = intitulé des chantiers (feuille VAR)
'***********************************************
Y = 1 'Indice variable chantier(y)
For X = 1 To 12 '1 to x (nbr de chantier)
'******************************************************
'boucle (K) de selection des feuilles SI (SI1,SI2 etc)
'******************************************************
For K = 1 To 6 'debut boucle K
If K = 1 Then
Sheets("SI1").Select
End If
If K = 2 Then
Sheets("SI2").Select
End If
If K = 3 Then
Sheets("SI3").Select
End If
If K = 4 Then
Sheets("SI4").Select
End If
If K = 5 Then
Sheets("SI5").Select
End If
If K = 6 Then
Sheets("SI6").Select
End If
'************************************
'selection chant dans feuille VAR
'************************************
For i = 6 To 130
If Cells(i, 10) = chantier(Y) Then
For J = 1 To 5
data(J) = data(J) + Val(Cells(i, J + 3))
Next J
End If
Next i
'************************************
'Fin selection chant (dans VAR)
'************************************
Sheets("vent").Select
For J = 2 To 6
Cells(Y + 6, J) = data(J - 1)
Next J
Next K 'fin boucle K
For J = 1 To 5
data(J) = 0
Next J
Y = Y + 1
Next X 'fin boucle intitule chant
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

Bonsoir
Code:
Dim data(5) As Integer
signifie que toutes les valeurs inscrites dans le tableau data sont entières.
Essayez en déclarant :
Code:
Dim data(5) As [COLOR="Red"]Double[/COLOR]
ROGER2327
 

eriiic

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

Bonjour,

en ayant remis data(5) As Double je ne vois pas de pb...
Soit plus précis : dans telles conditions, dans telle cellule j'ai ça et je devrais avoir ça
eric

edit:
j'ai l'impression que ton problème n'est pas un pb de nombres décimaux qui deviennent des entiers (enfin remet quand même data(5) as double), mais plutôt que ton programme n'est pas fini pour l'instant. Tu ne te sers pas de K complètement et ça doit t'écraser les valeurs précédentes et donner des incohérences.

Met des points d'arrets dans ton programme en cliquant dans la marge sur la ligne qui t'interesse (ligne devient marron) et fais en pas pas avec F8 (arret sur ligne suivante) ou F5 (arret au prochain point d'arret).

Et si tu n'as pas la fenetre 'espions', active là dans le menu affichage. Si tu sélectionnes une variable ou une expression dans ton code et que tu fais un cliqué-glissé vers cette fenetre tu pourras lire la valeur qu'elle a.

En pas à pas tu pourras voir l'évolution de tes variables et également le cheminement de ton programme et ainsi voir quand ça cloche.
 
Dernière édition:

Fo_rum

XLDnaute Accro
Re : Addition cellules decimales dans variable

Salut,

tester ce complément :
Code:
For i = 6 To 130
     If Cells(i, 10) = chantier(K) Then
        For J = 1 To 5
          [B]If Cells(Y + 1, 1) <> " " Then[/B] data(J) = data(J) + Cells(i, J + 3)
        Next J
    End If
Next i
tu peux aussi choisir ce type de variable :
Code:
Dim data(5) As [B]Single[/B]

Avec l'emplacement de la déclaration de cette variable, tu peux supprimer au début
Code:
'******
'initialisation variables
'******

For J = 1 To 5
    data(J) = 0  a'utomatique avec l'emplacement de la déclaration
Next J
 

Modeste

XLDnaute Barbatruc
Re : Addition cellules decimales dans variable

Bonjour daumal, ROGER2327, eriiiic, Fo_rum,

J'ai cherché à comprendre de quel message d'erreur tu pouvais bien nous parler ... en fin de compte, je viens péniblement de comprendre ... et m'aperçois que Fo_rum avait eu une intuition diabolique ... ou avait compris bien avant moi: les cellules D13, D17 et F17 de ta feuille SI1 contiennent un espace (unE espace ??). Donc forcément, placer ces espaces dans un tableau de valeurs de type Integer, Double ou Single ne saurait pas fonctionner.

Ceci dit, les autres remarques restent d'application:
- tableau déclaré de type Double (cfr ROGER2327) ou de type Single (cfr Fo_rum)
- Ne pas utiliser la fonction Val, puisqu'elle n'est pas nécessaire
- exécuter en pas à pas détaillé (cfr les précieux conseils d'eriiiic)

Modeste
 

daumal

XLDnaute Nouveau
Re : Addition cellules decimales dans variable

Bonjour Fo_rum et Modeste.

Suite aux recommandations de Fo_rum, j'ai effectué les changements mais j'obtiens l'erreur 13 sur la selection "en gras" dans la boucle For i

For i = 6 To 130
If Cells(i, 10) = chantier(K) Then
For J = 1 To 5
If Cells(Y + 1, 1) <> " " Then data(J) = data(J) + Cells(i, J + 3 Next J)
End If
Next i

J'ai declaré data(5) en single et oté l'initialisation des variables:
For J = 1 To 5
data(J) = 0
Next J
INFOS

Je constates que sur ma feuille envoyé au forum (le zip) cela fonctionne nickel.
Par contre sur mon dossier (a la maison) j'ai toujours l'erreur 13.
Sachant que j'ai de nombreuses feuilles SI1 SI2 SI3 .... + stats + differentes feuilles et macros que je ne peux pas envoyer (fichiers nominatifs légaux pour le boulot) et bien sûr trop lourd pour le forum.

Les feuilles SI1,SI2 etc... sont identiques (outre le coté nominatif) donc il s'agit probablement comme le font constater Fo_rum et Modeste, d'un espace sur les autres feuilles.

Pourtant le test If Cells(Y + 1, 1) <> " " Then ... devrait pallier à ce problème ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16