IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Code sur excel 2003 non compatible sur excel 2007! [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Code sur excel 2003 non compatible sur excel 2007!
    Bonjour,
    J'ai trouvé un fichier excel sur http://boisgontierjacques.free.fr/ à l'item Formulaire "Formulaire liste multi-colonnes" FormIntuitifMultiColonnes ou le ficheir porte le nom de formulintuitive42.xls. Et bien je souhaite l'utiliser avec excel 2007 et ce dernier affiche un message d'erreur (Impossible de définir la propriété columwidths. Le type ne correspond pas.) Que dois-je modifier pour permettre à ce programme de fonctionner correctement? Je vous avoue que je suis très dépassé par ce type de problème et je souhaite que quelqu'un puisse m'aider. Merci à l'avance. Je met le fichier en question pour vous permettre de tester la problématique : recherchemulticolonne.xls
    Au plaisir de vous lire à ce sujet...

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pourquoi ne poses-tu pas la question au créateur du code ?

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Patscaph.

    Quelle est la valeur qui est attribuée à .ColumnWidths ?
    Est-ce une valeur de type STRING ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Patscaph
    Bonjour Docmarti,

    Je présume que la valeur de columnwidth est fonction de la largeur que le programme identifie aux cellules du tableau excel. Pour vous permettre de mieux comprendre quelque chose que je risque de trop mal expliquer, je vous suggère d'accéder au fichier joint initialement et de faire un déroulement pas à pas si ce n'est pas trop demandé. merci pour votre aide.

    Pour répondre à Menhir,
    Le site en question de JacquesBoisGontier ne m'indique pas comment joindre la personne en question et il y présente une multitude de code VBA et conseil très utile. Sans doute qu'il très connu de votre côté de l'atlantique alors peut être avez vous une adresse pour moi. merci à l'avance.

    Au plaisir de voir lire.....

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Patscaph
    Bonjour,
    J'ai du développement pour ceux qui veulent bien m'aider. Et bien j'ai mis en commentaire la ligne de code problématique et maintenant le code passe. Toutefois, j'ai quand même besoin de l'inclure au code pour que la considération de la largeur des colonnes soit tenue en compte pour positionner les 'label' dans mon formulaire. Je pense que la solution est très simple et a trait à la syntaxe de 2003 qui ne serait pas compatible avec 2007. Voici la ligne provenant du userform:
    'Me.ListBox1.ColumnWidths = temp
    Que dois-je modifier pour cette ligne soit bien prise en compte?

    Le code complet est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      nbcol = f.[A1].CurrentRegion.Columns.Count
      Me.ListBox1.ColumnCount = nbcol
      Set plage = f.[A1].CurrentRegion
      Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1)
      Me.ListBox1.List = plage.Value
      i = 1
      x = 15
      For i = 1 To nbcol
        retour = Me.Controls.Add("Forms.Label.1", "Label" & i, True)
        Me("label" & i).Caption = f.Cells(1, i)
        Me("label" & i).Top = 45
        Me("label" & i).Left = x
        x = x + f.Columns(i).Width * 1.1
        temp = temp & f.Columns(i).Width * 1.1 & ";"
      Next
     
      'Me.ListBox1.ColumnWidths = temp      <---Code mit en commentaire
     
      For b = 1 To nbcol: Set Lbl(b).GrLabel = Me("Label" & b): Next b
    End Sub
    Pour plus de détail svp vous référer au fichier mit en pièce jointe au post initial.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Est-ce que tu as essayé, juste avant la ligne qui ne marche pas, de regarder le contenu de ta variable temp et de Me.ListBox1.ColumnWidths ?
    Essaye de mettre avant cette ligne simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Me.ListBox1.ColumnWidths
    Debug.Print temp

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Je pense comme Menhir que c'est la valeur de TEMP qui doit être modifiée:

    Essayons d'abord d'y ajouter une précision : PT

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = temp & f.Columns(i).Width * 1.1 & ";"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = temp & f.Columns(i).Width * 1.1 & " pt;"

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il y a combien de colonnes à ton fichier ?
    Au cas où, une Listbox ne peut avoir plus de 10 colonnes (index 0 à 9)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Patscaph
    RE- Bonjour Docmarti et Menhir
    Désolé du délais de retour de mes posts, je suis en transit et difficile de se connecter.

    Bon, j'ai fait les vérifications du contenu de la variable temp et de Me.ListBox1.ColumnWidths

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = temp & f.Columns(i).Width * 1.1 & ";"
    et aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = temp & f.Columns(i).Width * 1.1 & " pt;".
    et la valeur de temp est de la forme:
    "34.95;38.98;54.899;85.95;"
    et dans le second cas:
    "34.95 pt;38.98 pt;54.899 pt;85.95 pt;"

    Et pour le juste avant ...Me.ListBox1.ColumnWidths contient "49,5 pt;49,5 pt;49,5 pt;49,5 pt" ... et ce serait des valeurs inscrite par défaut, je crois.

    Là c'est une question de syntaxe (je crois) entre "," et "." Je présume qu'une vigule est requise pour la décimale n'est-ce pas?
    Aussi je remarque qu'il y a un ";" à la fin qui ne doit pas aider la cause.

    Donc bravo à vous deux, vous aviez parfaitement raison pour la source du problème. J'espère vous informer adéquatement et que votre solution sera conséquente. Merci Merci J'attends de vous relire.

    Bonjour "Parmi", le nombre de colonne ne dépassera pas 10. Merci de cette précision.

  10. #10
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    C'est bizarre de voir la propriété ColumnWidths du Listbox utiliser la virgule comme séparateur décimal alors que la valeur temp utilise le point.
    temp = "34.95 pt;38.98 pt;54.899 pt;85.95 pt;"

    .Me.ListBox1.ColumnWidths contient "49,5 pt;49,5 pt;49,5 pt;49,5 pt"
    Ca vaut la peine de tenter de remplacer les points par des virgules dans la valeur Temp juste pour voir.

    Que donne les Debug.Print dans le code suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      nbcol = f.[A1].CurrentRegion.Columns.Count
      Me.ListBox1.ColumnCount = nbcol
      Set plage = f.[A1].CurrentRegion
      Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1)
      Me.ListBox1.List = plage.Value
      i = 1
      x = 15
     
      For i = 1 To nbcol
        retour = Me.Controls.Add("Forms.Label.1", "Label" & i, True)
        Me("label" & i).Caption = f.Cells(1, i)
        Me("label" & i).Top = 45
        Me("label" & i).Left = x
        x = x + f.Columns(i).Width * 1.1
        'temp = temp & f.Columns(i).Width * 1.1 & ";"
        temp = temp & f.Columns(i).Width * 1.1 & " pt;"
     
      Next
     Debug.Print "---------------"
     Debug.Print "0. temp = " & temp
     Debug.Print "1. Me.ListBox1.ColumnWidths = " & Me.ListBox1.ColumnWidths
     
      Debug.Print "1a. Replace(temp, ., ,)" & Replace(temp, ".", ",")
     
      Me.ListBox1.ColumnWidths = Replace(temp, ".", ",")
     
      Debug.Print "2. Me.ListBox1.ColumnWidths = " & Me.ListBox1.ColumnWidths
     
      Me.ListBox1.ColumnWidths = temp
     
      Debug.Print "3. Me.ListBox1.ColumnWidths = " & Me.ListBox1.ColumnWidths
     
      Debug.Print "4. Application.International(xlCountrySetting) = " & Application.International(xlCountrySetting)
     
       Debug.Print "5. Format(0, .) = " & Format(0, ".")
     
     
      For b = 1 To nbcol: Set Lbl(b).GrLabel = Me("Label" & b): Next b
    End Sub

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Patscaph
    Bonjour Docmarti
    Tu es vraiment très gentil et ton support est très apprécié.
    Avec ton dernier conseil, la lumière est apparue.
    J'ai simplement fait les manipulations d'usage du contenu de la variable "temp" pour la formater au gout du code et le tour est joué. Tout fonctionne Nickel maintenant.
    Merci à Docmarti et aussi à d'autres d'où j'ai lu que ma façon de poster méritait des ajustements. Je vais en tenir conte et au plaisir de vous relire sur une prochaine de mes questions.


    Remplacer les "." par ";"
    temp = Replace(temp, ".", ",")

    Ensuite je supprimer le dernier ";"
    temp = Mid(temp, 1, Len(temp) - 1)

    Donc au final on a le code suivant qui passe tès bien le test pour la version excel 2007:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      nbcol = f.[A1].CurrentRegion.Columns.Count
      Me.ListBox1.ColumnCount = nbcol
      Set plage = f.[A1].CurrentRegion
      Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1)
      Me.ListBox1.List = plage.Value
      i = 1
      x = 15
      For i = 1 To nbcol
        retour = Me.Controls.Add("Forms.Label.1", "Label" & i, True)
        Me("label" & i).Caption = f.Cells(1, i)
        Me("label" & i).Top = 45
        Me("label" & i).Left = x
        x = x + f.Columns(i).Width * 1.1
        temp = temp & f.Columns(i).Width * 1.1 & " pt;"
      Next
      temp = Mid(temp, 1, Len(temp) - 1)
      temp = Replace(temp, ".", ",")
      Me.ListBox1.ColumnWidths = temp
     
      For b = 1 To nbcol: Set Lbl(b).GrLabel = Me("Label" & b): Next b
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Macro qui ne Fonctionne PAS sur Excel 2003 mais Fonctionne sur Excel 2010
    Par CedResma34 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/01/2014, 10h05
  2. [EXCEL 2003] Echec autofill sur la classe range
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/12/2008, 17h03
  3. Excel 2003 - Lien Hypertexte sur une valeur ?
    Par troxsa dans le forum Excel
    Réponses: 2
    Dernier message: 21/03/2008, 16h25
  4. acceder au code vba à partir d'un fichier excel 2003 depuis 97
    Par miko91 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/10/2007, 16h01
  5. [Excel 2003] Somme.si sur plusieurs feuilles
    Par leo2v2o dans le forum Excel
    Réponses: 6
    Dernier message: 24/01/2007, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo