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

prbl. incompatibilité de version XL

  • Initiateur de la discussion Initiateur de la discussion TITANIC
  • 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 !

T

TITANIC

Guest
Bonsoir le forum, merci vos aides précieuses.
' c'est promis, je vais essayer de me calmer sur le forum, je sais que vous êtes débordé.

un dernier conseil ( et je vous laisse tranquile pour une bonne semaine... ):
je suis un débutant très surpris par les
incompatibilités de code VBA selon les versions d'EXCEL
( 97 au boulot, 2003 chez moi )

1/Une erreur sur la valeur integer ( sur combobox )suivante :

L = Sheets('Feuil1').Range('A32767').End(xlUp).Row :
plantage du débogeur sous 97, passe sans soucis sous OFFICE2003.


2/ erreur toujours sur un combobox lié à une liste de date:
appel des dates ok ( liste ), mais lorsque je sélectionne une
date, lors du changement de focus, l'affichage passe en mode
numéro de série.
Sous 97, j'insère dans le code:

combobox.value= date:

le résultat est ok;lors de la sélection, la date s'affiche
correctement.
Sous office 2003, plantage du débogueur !!

Me voilà donc inquiet car le débutant que je suis est un peu
comment dirais je....Paumé!!
Est ce que je vais rencontrer ce type d'incompatibilité d'humeur
sur tous mes modules, ou bien est ce un mauvais Karma ??....

merci, bien à vous.
 
Salut
Ce genre de problèmes vient généralement des références. Si l'incompatibilité descendante est admissible (on ne peut demander à un ancien logiciel de fonctionner avec des fonctionnalités qui n'existaient pas à sa création), l'inverse est pénible.

microsoft, champion toutes catégories dans ce genre de problème, nous 'aide' en changeant systèmatiquement les références à chaque version.

Excel 97 :
Ouvrir VBA (Alt+F11)
Menu Outils références
Relever le nom et l'ordre des références et les mettre dans le même ordre sous 2003
et versa dans le vice pour 2003=>97 (mais pas sûr que les références existent)

petit conseil : noter les références initiales des 2 (97 & 2003), de manière à pouvoir faire un retour en arrière en cas de problèmes. Avec Billy, on est jamais trop prudent.

Et dans la mesure du possible, préférer les formules aux macros (c'est pas toujours possible, je sais).
A+
 
Ave,

''...très surpris par les
incompatibilités de code VBA selon les versions d'EXCEL..''

Il y en a très peu et elles (nouvelles propriétés par ex.) sont facilement repérables en faisant quelques tests d'exécution dans les différentes versions.
La compatibilité est descendante (à 99%) à partir de XL97 et plus.

''..1/Une erreur sur la valeur integer ( sur combobox )suivante :
L = Sheets('Feuil1').Range('A32767').End(xlUp).Row ...''

Il n'y a aucune raison pour que cette instruction (valide depuis XL5) soit tributaire de la version XL
Par contre, la déclaration de type Integer pour une variable représentant un index de ligne est, elle, totalement erronée (limitée à 32767). La déclarer Long ou pas du tout !

En résumé, pas d'incompatibilté dans ce que tu signales. Probablement simples problèmes de contexte

AV [aaa]
 
Merci à vous deux; les explications très techniques que vous me donnez me portent à croire que mon code est mal orienté. Voici donc la totalité du code ( il s'agit de rappeller la valeur d'un tableau, par un combobox, puis de retirer toutes les autres infos référentes de la base de donnée, via bouton ):
le code bouton :
If MsgBox('Sortir du Stock ?', _
vbYesNo + vbQuestion, 'Confirmation') = vbYes Then
End If
Application.ScreenUpdating = False
Range('A1').Select
Sheets('liste fa').Select
Dim config As Integer
Dim réponse As Integer
Dim L, i As Integer
L = Sheets('liste fa').Range('A32767').End(xlUp).Row
For i = 2 To L
If Sheets('Liste fa').Range('a' & i) = UserForm1.ComboBox5.Value Then
Sheets('liste fa').Range('A' & i).Select
ActiveCell.ClearContents
ActiveCell.Offset(0, 1).ClearContents
ActiveCell.Offset(0, 2).ClearContents
ActiveCell.Offset(0, 3).ClearContents
ActiveCell.Offset(0, 4).ClearContents
ActiveCell.Offset(0, 5).ClearContents
ActiveCell.Offset(0, 6).ClearContents
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
le code du combobox de recherche:
Private Sub ComboBox5_Change()
' rappel du titre FA
Dim L As Integer, i As Integer
L = Sheets('liste fa').Range('A32767').End(xlUp).Row
For i = 2 To L
If Sheets('liste fa').Range('a' & i) = UserForm1.ComboBox5.Value Then
UserForm1.ComboBox3.Value = Sheets('liste fa').Range('C' & i).Value
UserForm1.TextBox4.Value = Sheets('liste fa').Range('G' & i).Value
UserForm1.ComboBox1.Value = Sheets('liste fa').Range('D' & i).Value
UserForm1.TextBox2.Value = Sheets('liste fa').Range('F' & i).Value
UserForm1.TextBox12.Value = Sheets('liste fa').Range('B' & i).Value
UserForm1.TextBox13.Value = Sheets('liste fa').Range('E' & i).Value
End If
Next
End Sub
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
vu que celà fonctionne sous 2003, j'était partie sur l'idée d'une incompatibilité de version.
Mais je ne comprend toujours pas comment corriger cecode pour qu'il fonctionne sous 97!!!
J'ai pensé à un contrôle du bouton au début qui empêche l'exécution du code. Bref,que faire??
( je ne comprend pas AV quand il demande de 'déclarer long'. Niveau VBA très moyen)

Bien à vous.
 
Salut
Quand tu déclares une variable, tu lui affectes un nombre d'octet et une façon de lire ces octets.
Une variable de type Integer, est une variable qui peut aller de -32 768 à +32 767 (codage sur 2 octets).
Le nombre de ligne d'une feuille va jusqu'à 65 536. Ce qui fait qu'une variable de type integer n'est pas judicieuse pour indiquer le nombre de ligne : la ligne 32 768 et les suivantes provoquent un dépassement de capacité.

Pour éviter cet inconvénient, il suffit de déclarer les variables lignes en Long, qui peuvent aller de -2 147 483 648 à +2 147 483 647 .


Quelle est la ligne exacte qui plante ton programme, en mode pas à pas ?

J'avoue ne pas bien comprendre ton code :
If Sheets('liste fa').Range('a' & i) = UserForm1.ComboBox5.Value Then
UserForm1.ComboBox3.Value = Sheets('liste fa').Range('C' & i).Value

dans ta boucle, si la valeur de la combobox5 = la valeur en A de la ligne courante i (donc tu as fais un choix sur la combobox5), tu forces la combobox3 au choix de la valeur contenue en C de la même ligne, idem pour le reste; c'est bien ça ?
A+

Message édité par: Gorfael, à: 19/06/2006 22:47
 
Un grand merci à toi Gorfael , pour le retour sur ce problème. Moi et mon chef ( qui a fait un peu de Basic il y a longtemps ) sommes très à l'écoute de vos réponses et conseils; Nous sommes assez interloqués et essayons de comprendre, surtout depuis quelques heures. En effet nous avons installé une version de Office 2000 (pour essai ) et notre code marche très bien ! aucun souci...
En fait cet interret pour les versions vient du fait que nous préparons un fichier complexe, qui doit au final être sur serveur intranet ( serveur sous Office 2003 ).Mais, nous aurions besoins de réaliser un fichier identique tournant sans bug sur les machines non reliées au réseau ( sous 97, because licence ).Au début, nous avons bien rectifié la valeur integer à 32768, et le chef a tout de suite pensé à un problème de boucle, puis nous avons 'galérés' quelques heures sans rien trouver de satisfaisant ( débogueur toujours sur ligne:

L = Sheets('liste fa').Range('A32767').End(xlUp).Row

mais sous 2000 maintenant c'est ok ( le chef en perd son latin ). Pour l'aspect général du sujet, ci-joint notre fichier intermédiaire de travail, avec explications.
PS j'ai copié ton dernier résonnement et vais lui montrer demain
note: le fichier joint sur prochain post.
Encore merci !
 
Salut TITANIC
L = Sheets('liste fa').Range('A32767').End(xlUp).Row
Si c'est toujours sur cette ligne qu'apparaît le problème, c'est peut-être 'l'exception qui confirme la règle'. Sans approche réellement raisonnée, juste une intuition :
Il y a peut-être(ça en fait beaucoup) un bug lié au fait que 32767 correspond à (2^15)-1 soit sur un codage de 2 octets 01111111 11111111.
L'autre possibilité, c'est que la ligne telle qu'elle apparaît ne soit pas comprise comme telle par Excel(sur une feuille, j'ai été confronté à ce genre de problème, résolu en supprimant le contenu d'une cellule et en la réécrivant à l'identique).

Donc, tu mets la ligne en commentaire et tu la réécris desous, en changeant 'A32767' par 'A32760' par exemple.
A+
 
Slut!
Bon ben un grand merci à toi pour toutes ces précisions. pour tester, il va nous faloir retravailler sous un poste avec 97, car nous allons essayer de garder ( en douce ) 2000, le poste n'étant pas en réseau.
En tous les cas cette histoire nous a permis ( avec ton aide surtout, et celle d'AV )de résonner plus profondément sur l'application.
Si jamais sous 97 le bug persiste, je reposerais le cas un de ces quatre sur le forum.
Bien à toi, merci 1000 fois !
 
- 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.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…