Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

problème d'incompatibilité vba (non compatible excel<2007)

  • Initiateur de la discussion Initiateur de la discussion bernaroff
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

bernaroff

Guest
Bonjour, j'ai un soucis avec ma macro, lorsque j'éxecute ma macro me retourne une erreur d'execution (13) sur une incompatité

le ligne fautive (hou la pas belle):
If (l > 0 And ((Sheets("Puissance périodisée").Cells(4 + l, 5).Value < Sheets("Puissance périodisée").Cells(3 + l, 5).Value - moyenne) Or (Sheets("Puissance périodisée").Cells(4 + l, 5).Value > Sheets("Puissance périodisée").Cells(3 + l, 5).Value + moyenne)))

le l>0, c'est pour démarrer après la première et ne pas tomber sur les titres en l+3, dans les Sheets("Puissance périodisée").Cells ce ne sont que des integer, et moyenne également, malgré tout j'ai un problème d'incompatibilité et je pense que ça doit être dans la façon dont c'est écrit

si quelqu'un peut m'aider je suis vraiment à cours d'idée
merci
Bernaroff
 
Dernière modification par un modérateur:
Re : problème d'incompatibilité vba

Bonjour,

Difficile de répondre juste sans fichier exemple.
As-tu des cellules "pseudo-vides" dans tes colonnes. (Cellule avec une chaine vide "" ou caratère non imprimable)
Comment est déclaré i

Etc.

A+
 
Re : problème d'incompatibilité vba

Sub fonction()

Application.ScreenUpdating = False

'supprime les feuilles Calcul et Puissance périodisée si elles existent
If Sheets(Sheets.Count).Name = "Calcul" Then
Sheets("Calcul").Visible = 1
Sheets("Calcul").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If

If Sheets(Sheets.Count).Name = "Puissance périodisée" Then
Sheets("Puissance périodisée").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If

'créer les feuilles
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Puissance périodisée"

Sheets("Puissance périodisée").Cells(3, 1) = "Début cycle"
Sheets("Puissance périodisée").Cells(3, 3) = "Fin cycle"
Sheets("Puissance périodisée").Cells(3, 5) = "Puissance moyenne cycle"
Sheets("Puissance périodisée").Cells(3, 6) = "perte sur objectif"
Dim i As Long, moyenne As Long, debut As Integer, j As Integer, prod As Double, l As Integer, k As Integer, nbcells As Long, m As Integer
m = 0
debut = 1
prod = 0
moyenne = 0
l = 0
For nbcells = 2 To 750
If Not IsEmpty(Sheets("Points 10").Cells(nbcells, 10).Value) Then
m = m + 1
End If
Next nbcells
For k = 3 To m
moyenne = moyenne + Sheets("Points 10").Cells(k, 10).Value
Next k
moyenne = moyenne * 0.3 / (m)
'moyenne = 50
Dim nom As String
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Calcul"

'remplir les plages de données
For i = 4 To m
If ((Sheets("Points 10").Cells(i, 10).Value > Sheets("Points 10").Cells(i - 1, 10).Value + moyenne Or Sheets("Points 10").Cells(i, 10).Value < Sheets("Points 10").Cells(i - 1, 10).Value - moyenne Or i = m) And i - debut - 3 > 6) Then
Sheets("Puissance périodisée").Cells(4 + l, 1).Value = Sheets("Points 10").Cells(debut + 2, 1).Value
Sheets("Puissance périodisée").Cells(4 + l, 2).Value = Sheets("Points 10").Cells(debut + 2, 2).Text
Sheets("Puissance périodisée").Cells(4 + l, 3).Value = Sheets("Points 10").Cells(i - 1, 1).Value
Sheets("Puissance périodisée").Cells(4 + l, 4).Value = Sheets("Points 10").Cells(i, 2).Text
For j = debut + 2 To i - 1
prod = prod + Sheets("Points 10").Cells(j, 10).Value
Next j
Sheets("Puissance périodisée").Cells(4 + l, 5).Value = prod / (i - debut - 2)
Sheets("Puissance périodisée").Cells(4 + l, 6).Value = Sheets("Points 10").Cells(i - 1, 12).Value - Sheets("Puissance périodisée").Cells(4 + l, 5).Value
If (i = m) Then
Sheets("Puissance périodisée").Cells(4 + l, 3).Value = Sheets("Points 10").Cells(m, 1).Value
Sheets("Puissance périodisée").Cells(4 + l, 4).Value = Sheets("Points 10").Cells(m, 2).Text
prod = prod + Sheets("Points 10").Cells(m, 10).Value
Sheets("Puissance périodisée").Cells(4 + l, 5).Value = prod / (m - debut - 1)
Sheets("Puissance périodisée").Cells(4 + l, 6).Value = Sheets("Points 10").Cells(i - 1, 12).Value - Sheets("Points 10").Cells(4 + l, 5).Value
End If
If (l > 1 And ((Sheets("Puissance périodisée").Cells(4 + l, 5).Value < Sheets("Puissance périodisée").Cells(3 + l, 5).Value - moyenne) Or (Sheets("Puissance périodisée").Cells(4 + l, 5).Value > Sheets("Puissance périodisée").Cells(3 + l, 5).Value + moyenne))) Then
Sheets("Puissance périodisée").Cells(3 + l, 3).Value = Sheets("Puissance périodisée").Cells(4 + l, 3).Value
Sheets("Puissance périodisée").Cells(3 + l, 4).Text = Sheets("Puissance périodisée").Cells(4 + l, 4).Text
Sheets("Puissance périodisée").Cells(3 + l, 5).Value = 0.5 * Sheets("Puissance périodisée").Cells(3 + l, 5).Value * Sheets("Puissance périodisée").Cells(4 + l, 5).Value
l = l - 1
End If

Dim n As Integer
For n = 0 To m / 24
Sheets("Calcul").Cells(24 * n + 1, 1).Value = Sheets("Points 10").Cells(24 * n + 3, 1).Text
Next n
For n = debut + 2 To i - 1
Sheets("Calcul").Cells(n - 2, 2).Value = Sheets("Puissance périodisée").Cells(4 + l, 5).Value
Next n
prod = 0
debut = i - 2
l = l + 1
End If
Next i

'créer le graphique
Sheets("Calcul").Activate
Columns("C:C").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("'Calcul'!$B:$B")
ActiveChart.ChartType = xlLine
ActiveChart.SeriesCollection(1).XValues = "='Calcul'!$A:$A"
Sheets("Calcul").Select
ActiveChart.Legend.Select
ActiveChart.SeriesCollection(1).Name = "=""Puissance périodisée"""
Selection.Delete
ActiveChart.ChartArea.Copy
Sheets("Puissance périodisée").Activate
ActiveSheet.Paste
ActiveSheet.ChartObjects(1).Left = Range("H2").Left
ActiveSheet.ChartObjects(1).Top = Range("H2").Top

For j = 1 To 6
Range(Cells(1, j), Cells(3, j)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.MergeCells = True
End With
Next j

Sheets("Calcul").Visible = 0
Sheets("Synthèse").Select
End Sub

voila le reste de mon module, seulement je peux pas vraiment donner d'exmple puisque le fichier est assez lourd (non téléchargeable sur ce site) avec une dizaine de module
si tu arrives à le comprendre (et surtout si tu as le courage de le lire, c'est assez ennuyeux)...
 
Re : problème d'incompatibilité vba

Re,

Suggestion: faire un classeur exemple avec le stricte necessaire et la macro qui ne fonctionne pas, zipper le tout et joindre dans un post.

A+
 
Re : problème d'incompatibilité vba

Re,

Dans
Code:
Sheets("Puissance périodisée").Cells(3 + l, 5).Value - moyenne)
(2 fois présente dans ta condition).
à la première boucle l vaut 3 donc .Cells(3+l,5) = la cinquième colonne de la ligne d'entête de ton tableau de la feuille "Puissance périodisiée"

Correction
Code:
 Sheets("Puissance périodisée").Cells(4+ l, 5).Value - moyenne)

Ou alors initialiser l à 1 avant la boucle.

P.s. où l'on voit l'intérêt :
1 - d'un fichier exemple
2 - de la fenêtre d'execution de vbe (CTRL+G) pour affichage des variables par en mode pas à pas:
?Sheets("Puissance périodisée").Cells(3 + l, 5).Value
A+
 
Re : problème d'incompatibilité vba

si dans le code enlève les 5 lignes du if qui posent problème, tu as un apperçu de ce que je souhaite faire, ce que je souhaite rajouter, c'est enlever les valeurs qui sont trop proches les unes des autres pour seulement gardé une courbe par palier montrant les changements important
dans la conditions j'ai donc un (valeur courante)<(valeur précédente)-pas et un (valeur courante)>(valeur précédente)+pas
je vois bien sinon que le l pose problème, mais en mettant dans la condition if (l>0) je pense que cela règle le problème de la première incrémentation non ?
 
Re : problème d'incompatibilité vba

Re,

If te faut alors faire 2 if imbriqués car la totalité des membre d'une condition IF est évaluée

Code:
IF l>0 then
    IF ((Sheets("Puissance périodisée").Cells(4 + l, 5).Value < Sheets("Puissance périodisée").Cells(3 + l, 5).Value - moyenne) Or (Sheets("Puissance périodisée").Cells(4 + l, 5).Value > Sheets("Puissance périodisée").Cells(3 + l, 5).Value + moyenne))) Then
   'Le code de traitement
   End IF
End IF



Prochain message écrit de cette façon (sans aération, ni Re bonjour ou Re, ni merci) je ne répond plus. On n'est pas des machines.

A+
 
Re : problème d'incompatibilité vba

bon de toute évidence tu as raison, c'est bien la première incrémentation du l qui pose problème, seulement je ne souhaite pas que le if qui pose problème se fasse sur la première incrémentation mais ne commence qu'à la deuxième ...
j'ai essayé avec un l<>0 ou un l>0 mais rien ne marche...

merci beaucoup pour ton aide
 
Re : problème d'incompatibilité vba

Re

d'abord je m'excuse pour mon ton un peu tranchant, malheureusement je n'ai aucune patience avec la programmation et lorsque j'ai un bug ça m'énerve assez vite, mais ne le prends pas contre toi...

enfin merci beaucoup pour ton aide et ta patience, il me reste un ou deux trucs à fixer la dedans et je devrais pouvoir le faire fonctionner

Cdt
Bernaroff
 
Re : problème d'incompatibilité vba

RE,

dans le code de la première itération:

Code:
If l>0 Then

 
   'Je mets ici le traitement qui n'est pas concerné par la 
première itération

 
End if

 
 

 
'Je mets ici le traitement concerné par TOUTES les itérations
'.......
'......
'Après incrémentation de l le traitement contenu dans If l>0 sera exécuté 
à la prochaine itération
l=l+1

N'est-ce pas ce que tu souhaites?

A+
 
Re : problème d'incompatibilité vba

Re

En fait ta solution avec un double if imbriqué a très bien marché, mais du coup après un autre problème s'est afficher, et ce sont mes indices qui n'étaient pas bon

en PJ le résultats de ce que je cherchais

Merci et bonne fin d'après midi
Bernaroff
 

Pièces jointes

Re : problème d'incompatibilité vba

Re,

Résoudu alors🙂 Merci du retour et du fichier qui fonctionne.

Ta pièce jointe bien que en .xls ne peut fonctionner que sur une version Excel 2007
AddChart n'existe pas pour les objets Shapes en version inférieures.

Ré-édite ton post et signale l'incompatibilité du fichier avec version <2007, pour les futurs forumeurs ce sera utile.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
458
Réponses
2
Affichages
507
Réponses
0
Affichages
658
Réponses
5
Affichages
753
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…