Erreur 16 "expression trop complexe"

Résolu
cs_Licorno Messages postés 3 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 20 décembre 2011 - 20 déc. 2011 à 16:52
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 20 déc. 2011 à 20:09
Bonjour

Je viens de passer de Ecxel 2003 à 2010, mon programme fonctionnait parfaitement avant .

A chaque exécution de la fonction pour Visualise avant impression d'une feuil , ca me donne "erreur 16 "Expression trop complexe " ?

En gros dans mon UserForm je clique sur un bouton qui me permettra de visualiser mon tableau excel en mode avant impression.

Public Sub imprim5()

Dim x As Double, y As Double, z As Double
Dim derligne As Integer
With Feuil50
.Cells(1, 1) UserForm4.casa2: .Cells(1, 2) UserForm4.casa1
For x 1 To 20: .Cells(2, x) Feuil15.Cells(1, x): Next
z = 3
If UserForm4.casa2.ListIndex > 0 Then casa UserForm4.casa2.ListIndex - 1 Else saca -1
If UserForm4.casa1.ListIndex > 0 Then nocasa1 UserForm4.casa1.ListIndex - 1 Else nocasa1 -1

For x = 2 To bque1
Select Case casa
Case -1
If Feuil15.Cells(x, 8) nocasa1 Or nocasa1 -1 Then For y = 1 To 9: .Cells(z, y) = Feuil15.Cells(x, y): Next: z = z + 1

Case 0 To 10000
If Feuil15.Cells(x, 7) casa And Feuil15.Cells(x, 8) nocasa1 Or nocasa1 = -1 And Feuil15.Cells(x, 7) = casa Then For y = 1 To 9: .Cells(z, y) = Feuil15.Cells(x, y): Next: z = z + 1

End Select
Next
End With
End Sub


En ce qui concerne la ligne pb
voici la fonction:
Public Function bque1()
bque1 = Feuil1.Range("a65536").End(xlUp).Row + 1
End Function


Merci d'avance pour vos solutions.


BooZin

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
20 déc. 2011 à 18:27
Bonjour,
1) tu développes donc sous VBA et non VB6. Prends s'il te plait dorénavant le plus grand soin à bien choisir la section dans laquelle tu ouvres une discussion
2) prends également le soin de présenter tes bouts de code indentés et entre balises CODE
3) ce n'est pas Excel 2010, qui est responsable, mais bel et bien toi qui :
a) ne type pas ta fonction
b) type en ... double (oh!) le x de ta boucle For !
Si tu es, en plus, capable de me dire si tu as une ligne dont le numéro comporte des décimales, je veux bien acheter ta version de Excel
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
20 déc. 2011 à 18:44
Bonjour,

Sans pouvoir essayer, ta structure de la boucle FOr x=... est nécessaire bien compliqué... Il faut éviter que les bornes d'une boucle dépendent d'un calcul qui renvoi sur un calcul variant (ou potentiellement variant)...

Donc essai plutôt quelque chose comme :

bque1 = Feuil1.Range("a65536").End(xlUp).Row + 1
For x = 2 To bque1

et vire ta fonction " Public Function bque1() " qui rentra nécessairement en conflit...

Amicalement,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
20 déc. 2011 à 18:48
Bonjour, us_40,

Même en passant par ce tremplin en effet inutile (je viens de le faire ! et sous 2010) ===>> ça passe.
Son vrai problème (bien plus grave) est le typage de x (en double !). x est à typer en long (et là ===>> plus de problème, y compris avec la fonction)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
NHenry Messages postés 15001 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 octobre 2022 158
20 déc. 2011 à 19:14
Bonjour,

Message déplacé, prends en note la catégorie.

Regardes le point 2 de ma signature.

Sinon, en plus de ce qui a été dit :
- Indentes ton code correctement.
- Evites les instrucctionsséparées par des :
For x=1 to 10:Label1.Caption=Label1.Caption& x:Next
Est moins lisible que :
For x=1 to 0
    Label1.Caption = Label1.Caption & cstr(x)
Next x

Pareil pour les If, fais les en plusieurs lignes If/End If

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0

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

Posez votre question
cs_Licorno Messages postés 3 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 20 décembre 2011
20 déc. 2011 à 19:24
Bonjour,

Merci pour ses réponses, et désolé pour le non respect de procédure du forum.

En effet le problème vient du typage de x, je vous remerci ucfoutu

Amicalement

BooZin
0
cs_Licorno Messages postés 3 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 20 décembre 2011
20 déc. 2011 à 19:52
Un autre problème persiste, toujours dans le même projet, au moment de l'activation de la macro un nouveau message massage apparait :
"Erreur d’exécution '57121' Erreur définit par l'application ou par l'objet "
voici le code de ma macro (entre balises cette fois)


Sub Banque()
Dim c As Single
Dim bque1 As Double, fin2 As Double
Dim bque1 As String, rgt2 As String
Feuil1.Activate
bque1 bque1 + 1: bque2 bque1 + 3
rgt1 = "D" & bque1 & ":F" & bque1
rgt2 = "D" & bque1 & ":F" & bque2
Range(rgt1).Select
Selection.AutoFill Destination:=Range(rgt2), Type:=xlFillDefault
Feuil80.Activate
End Sub


Débogage de la ligne "Feuil80.Activate"

Merci d'avance

BooZin
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
20 déc. 2011 à 20:09
Que fais-tu là ?
1) On ne peut de toutes manières et en aucun cas typer une variables en deux types différents (double, puis string) !
2) Si Feuil1 n'est pas déclarée comme objet Worksheet, on ne peut écrire :
Feuil1.Activate

Si "Feuil1" est un nom de feuille, c'est alors :
Worksheets("Feuil1").activate 

3) il est enfin lourd et malheureux de procéder ainsi, à grands renforts de "Activate", "Select", et tutti quanti !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0