Erreur 16 "expression trop complexe" [Résolu]

Messages postés
3
Date d'inscription
lundi 28 novembre 2011
Dernière intervention
20 décembre 2011
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
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.
Commenter la réponse de us_30
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
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
---
Commenter la réponse de NHenry
Messages postés
3
Date d'inscription
lundi 28 novembre 2011
Dernière intervention
20 décembre 2011
0
Merci
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
Commenter la réponse de cs_Licorno
Messages postés
3
Date d'inscription
lundi 28 novembre 2011
Dernière intervention
20 décembre 2011
0
Merci
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
Commenter la réponse de cs_Licorno
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.