problème d'incompatibilité de type

babou466

XLDnaute Junior
Bonjour, j’ai un problème d’incompatibilité de type au niveau du premier somme, seulement à la seconde utilisation de ma boucle for et je ne comprend pas pourquoi je parviens à l’effectuer une fois et pas une seconde :
While…

SommeSignal = 0
SommeAvarie = 0
SommeHorsRas = 0
For periode = 1 To 3
SommeSignal = SommeSignal + Cells(vlLigneSynt, (3 * periode) + 3).Value
SommeAvarie = SommeAvarie + Cells(vlLigneSynt, (3 * periode) + 4).Value
SommeHorsRas = SommeHorsRas + Cells(vlLigneSynt, (3 * periode) + 5).Value
Next periode
…j’incrémente ma vlligneSynt+je change aussi pour faire varier mon while
wend
J’ai au préalable déclaré mes variables de la façon suivante:
Dim SommeSignal, SommeAvarie, SommeHorsRas, periode As Integer

Est ce que quelqu’un pourrait me venir en aide, je suis en train de m’arracher les cheveux…
merci
 

babou466

XLDnaute Junior
Re : problème d'incompatibilité de type

voila mon module entier si vous préférez:
Sub Remplir_Donnees_Et_Top5(LigneTop5, vlLigneConfig) 'pour une affaire

Dim vlColonne As Integer 'dernière colonne active dans l'indicateur
Dim vlLigneIndic As Integer 'ligne indicateur
Dim vlLigneSynt As Integer 'ligne de données de synthèse
Dim NbLigneDonnees As Integer
Dim vlHeures As Long
Dim vlMois As Integer
Dim vlAvariesHorsRas As Integer
Dim SommeSignal, SommeAvarie, SommeHorsRas, periode As Integer
Dim TotalSign, TotalAvarie, TotalHorsRas As Integer
Dim vlColonneTop5, vlRangComposant, PourcHorsRas As Integer
Dim OngletDonnees As String
Dim OngletDonnee2 As String
Dim OngletCalcul As String
Dim OngletConfig As String
Dim OngletSignal As String
Dim OngletAvarie As String
Dim OngletRas As String
Dim vlTabTop5Sign(1 To 5, 1 To 2) As Variant
Dim vlTabTop5Avarie(1 To 5, 1 To 2) As Variant
Dim vlTabTop5AvarieHR(1 To 5, 1 To 2) As Variant
Dim i, j, k As Integer
Dim PourcSign, PourcAvarie As Variant



OngletDonnees = "données" 'pour possibilité de changements
OngletDonnee2 = "donnée2"
OngletCalcul = "calcul"
OngletConfig = "configuration"
OngletSignal = "Bilan_Top5_Signalement"
OngletAvarie = "Bilan_Top5_Avarie"
OngletRas = "Bilan_Top5_AvarieHorsRas"


'partir d'un indicateur ouvert dans le fichier synthèse devant se nommer vgNomIndic!
Application.ScreenUpdating = False

'on commence par trouver la dernière colonne active de l'indicateur grace à la feuille calcul

Windows(vgNomIndic).Activate 'activation indicateur déjà ouvert dans MAJ_DATA
Sheets(OngletCalcul).Select 'on cherche dans la feuille calcul de l'indicateur
'la colonne ayant la dernière valeur
vlColonne = Cells(9, 20).Value + Cells(7, 20).Value + 3

'on parcourt tout le tableau donnée2 de notre indicateur pour remplir directement
'le tableau "données" de la synthèse


Sheets(OngletDonnee2).Select 'active donnée2 de l'indicateur qui reste actif pour la suite

vlLigneSynt = 7
vlLigneIndic = 950 'première ligne remplie de données2 avec le détail des composants
While (Cells(vlLigneIndic + 1, 8).Value <> "" Or Cells(vlLigneIndic + 1, 7).Value <> "sans composant") And vlLigneIndic < 10000
'on remplit directement les valeurs des 5 premières colonnes de données de synthèse

'le nom de l'affaire dans le tableau de configuration de la synthèse
'on le met également dans la 3ème colonne des 3 tableaux top5
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 1).Value = Workbooks(vgFichierSynthese).Worksheets(OngletConfig).Cells(vlLigneConfig, 2).Value
If vlLigneSynt = 7 Then
Workbooks(vgFichierSynthese).Sheets(OngletSignal).Cells(LigneTop5, 3).Value = Workbooks(vgFichierSynthese).Worksheets(OngletConfig).Cells(vlLigneConfig, 2).Value
Workbooks(vgFichierSynthese).Sheets(OngletAvarie).Cells(LigneTop5, 3).Value = Workbooks(vgFichierSynthese).Worksheets(OngletConfig).Cells(vlLigneConfig, 2).Value
Workbooks(vgFichierSynthese).Sheets(OngletRas).Cells(LigneTop5, 3).Value = Workbooks(vgFichierSynthese).Worksheets(OngletConfig).Cells(vlLigneConfig, 2).Value
End If

'le nom du composant dans la 2ème colonne
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 2).Value = Cells(vlLigneIndic + 1, 8).Value
'on copie la liste des composants pour pouvoir les triés ensuite par ordre décroissant
For k = 15 To 23 Step 4
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, k).Value = Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 2).Value
Next k

'le mois de l'affaire dans la 3ème colonne de données ainsi que dans les 3 tableaux top5 dans la 2ème colonne
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 4).Value = Cells(9, vlColonne).Value
If vlLigneSynt = 7 Then
Workbooks(vgFichierSynthese).Sheets(OngletSignal).Cells(LigneTop5, 2).Value = Cells(9, vlColonne).Value
Workbooks(vgFichierSynthese).Sheets(OngletAvarie).Cells(LigneTop5, 2).Value = Cells(9, vlColonne).Value
Workbooks(vgFichierSynthese).Sheets(OngletRas).Cells(LigneTop5, 2).Value = Cells(9, vlColonne).Value
End If

'la 4ème colonne des quantités est vide

'les heures de la dernière période dans la 5ème colonne
'nécessité d'un test pour voir s'il s'agit d'heures de fonctionnement sous tension
'ou de roulement
If Cells(vlLigneIndic + 3, 8).Value = "en heures sous tension" Then
vlHeures = Cells(853, vlColonne).Value
Else
vlHeures = Cells(854, vlColonne).Value 'dans ce cas il s'agit d'heures de roulement
End If
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 5).Value = vlHeures


'remplissage du tableau de donnée avec info Sign, avarie, avarie HRas, des 3 dernier mois
For vlMois = 0 To 2
' remplissage signalement dans colonne 6, 9 et 12
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 6 + 3 * vlMois).Value = Cells(vlLigneIndic, vlColonne - vlMois).Value

'remplissage du nombre d'avaries
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 7 + 3 * vlMois).Value = Cells(vlLigneIndic + 1, vlColonne - vlMois).Value

'remplissage du nombre d'avaries hors RAS
'on soustrait au préalable le nombre d'avaries à RAS resp. ou causes ext au nombre d'avaries totales
vlAvariesHorsRas = Cells(vlLigneIndic, vlColonne - vlMois).Value - Cells(vlLigneIndic + 1, vlColonne - vlMois).Value
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 8 + 3 * vlMois).Value = vlAvariesHorsRas

Next vlMois

'on fait les sommes des trois critères étudiés
SommeSignal = 0
SommeAvarie = 0
SommeHorsRas = 0
For periode = 1 To 3
SommeSignal = SommeSignal + Cells(vlLigneSynt, (3 * periode) + 3).Value
SommeAvarie = SommeAvarie + Cells(vlLigneSynt, (3 * periode) + 4).Value
SommeHorsRas = SommeHorsRas + Cells(vlLigneSynt, (3 * periode) + 5).Value
Next periode
'on les met dans le tableau de données qui est toujours actif
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 16).Value = SommeSignal
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 20).Value = SommeAvarie
Workbooks(vgFichierSynthese).Sheets(OngletDonnees).Cells(vlLigneSynt, 24).Value = SommeHorsRas

vlLigneSynt = vlLigneSynt + 1 'on change la ligne du tableau données de synthèse
vlLigneIndic = vlLigneIndic + 40 'on change de composant dans l'indicateur
Wend
 

Excel-lent

XLDnaute Barbatruc
Incompatibilité de type -> définition de tes variables?

Bonsoir Babou466,

babou466 à dit:
incompatibilité de type au niveau du premier somme (...) Dim SommeSignal, SommeAvarie, SommeHorsRas, periode As Integer

Cela peux provenir de la définition de tes variables. Es-tu sûr que tes variables ci-dessus (lors de l'exécution de ta macro) ne prennent pas une valeur autre que :
-> 1 nombre ENTIER
-> valeur minimum : -32.768
-> valeur maximum : + 32.767

?

Bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87