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 :

soucis avec mon code


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Points : 75
    Points
    75
    Par défaut soucis avec mon code
    bonjour le forum

    j'ai un petit soucis avec mon code, en effet dans un userform je récupère des données dans des textbox et des optionbuttons pour les insérer dans 2 feuilles excel et pour les autres pas

    code

    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
    Sheets("TCOOLANT").Range("C65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton55, "Liège", "")
        Sheets("transit").Range("F8").Value = IIf(OptionButton55, "Liège", "")
        Sheets("TCOOLANT").Range("C65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton57, "Jemeppe", "")
        Sheets("transit").Range("F8").Value = IIf(OptionButton57, "Jemeppe", "")
        Sheets("TCOOLANT").Range("D65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton58, "Liège", "")
        Sheets("transit").Range("F9").Value = IIf(OptionButton58, "Liège", "")
        Sheets("TCOOLANT").Range("D65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton59, "Jemeppe", "")
        Sheets("transit").Range("F9").Value = IIf(OptionButton59, "Jemeppe", "")
        Sheets("TCOOLANT").Range("E65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton60, "Liège", "")
        Sheets("transit").Range("F10").Value = IIf(OptionButton60, "Liège", "")
        Sheets("TCOOLANT").Range("E65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton61, "Jemeppe", "")
        Sheets("transit").Range("F10").Value = IIf(OptionButton61, "Jemeppe", "")
        Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton62, "Liège", "")
        Sheets("transit").Range("F11").Value = IIf(OptionButton62, "Liège", "")
        Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton63, "Jemeppe", "")
        Sheets("transit").Range("F11").Value = IIf(OptionButton63, "Jemeppe", "")
        Sheets("TCOOLANT").Range("I65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton64, "Liège", "")
        Sheets("transit").Range("I8").Value = IIf(OptionButton64, "Liège", "")
        Sheets("TCOOLANT").Range("I65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton65, "Jemeppe", "")
        Sheets("transit").Range("I8").Value = IIf(OptionButton65, "Jemeppe", "")
        Sheets("TCOOLANT").Range("J65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton66, "Liège", "")
        Sheets("transit").Range("I9").Value = IIf(OptionButton66, "Liège", "")
        Sheets("TCOOLANT").Range("J65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton67, "Jemeppe", "")
        Sheets("transit").Range("I9").Value = IIf(OptionButton67, "Jemeppe", "")
        Sheets("TCOOLANT").Range("K65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton68, "Liège", "")
        Sheets("transit").Range("I10").Value = IIf(OptionButton68, "Liège", "")
        Sheets("TCOOLANT").Range("K65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton69, "Jemeppe", "")
        Sheets("transit").Range("I10").Value = IIf(OptionButton69, "Jemeppe", "")
        Sheets("TCOOLANT").Range("L65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton70, "Liège", "")
        Sheets("transit").Range("I11").Value = IIf(OptionButton70, "Liège", "")
        Sheets("TCOOLANT").Range("L65536").End(xlUp).Offset(1, 0).Value = IIf(OptionButton71, "Jemeppe", "")
        Sheets("transit").Range("I11").Value = IIf(OptionButton71, "Jemeppe", "")
    donc dans les lignes que j'ai mis en rouge ci dessus les données s'inscrive correctement dans ma feuille excel

    pour les autres des fois oui et des fois non

    y a t il une solution pour remédier au problème et simplifier éventuellement ce code

    merci pour votre aide

    petite précision

    les valeurs venants des textbox s'enregistre correctement sur les deux feuilles et le probleme vient des valeur des optionbutton et je ne sais pas comment résoudre ce probleme

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut revemane et le forum
    ...donc dans les lignes que j'ai mis en rouge ci dessus les données s'inscrive correctement dans ma feuille excel
    pour les autres des fois oui et des fois non...
    Ton code est imbuvable, et comme on ne connaît pas ce qu'il doit faire exactement...
    Concernant le code en rouge :
    - il ne concerne que la feuille "TCOOLANT".
    - il met en dernière ligne + 1 des colonnes concernées, soit une ville, soit l'autre. Étant des "OptionButton", on peut supposer qu'ils fonctionnent en tandem 58 avec 59, 60 avec 61, etc... ce qui nous permet un code plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim X As Integer
    '...............
    For X = 1 To 7
        Sheets("TCOOLANT").Cells(65536, IIf(X < 4, X + 3, X + 5)).End(xlUp)(2) = _
                               IIf(Me.Controls("OptionButton" & ((X * 2) + 56)), "Liège", "Jemeppe")
    Next X
    Remarque : Le renommage des controles ne serait pas idiot et permettrait de simplifier encore le code.
    Si les controls ne fonctionnent pas en tandem, il suffira de rajouter une ligne dans la boucle avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Me.Controls("OptionButton" & ((X * 2) + 56)+1), "Liège", "Jemeppe")
    Ne connaissant pas l'organisation de la feuille, je ne peux rien affirmer. Mais si 2 OptionButtons fonctionnant en tandem restent vides, on n'aura plus l'information sur une seule ligne.

    Pour le code ne fonctionnant qu'imparfaitement :
    pour les autres des fois oui et des fois non
    donne une grande précision quand au problème !!!
    Ce serait pas mal d'expliquer quand ça fonctionne, et quand ça ne fonctionne pas correctement : quelles données, qu'est-ce qui se passe ?

    Toutefois, des remarques sur le code :
    - le code n'a pas le même séquençage : on saute OptionButton56
    - On travaille sur la même cellule. Par exemple (F8 pour OptionButton55 et OptionButton57) : seul le résultat de OptionButton57 sera inscrit : "Jemeppe" ou "". qui écrasera ce que OptionButton55 avait inscrit. Dans l'autre séquence (code en rouge) ça fonctionne par ce qu'on inscrit à la ligne suivant la dernière non vide. Donc, on n'écrase pas si une valeur existe (inscrire "" revient à vider la cellule).
    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Points : 75
    Points
    75
    Par défaut
    merci pour ta réponse

    n'ayant pas de formation en VBA je fais comme je peu en pêchant des info à gauche et à droite

    pour le code que tu m'a marquer ci dessus pour simplifier le mien peux tu s.v.p et si tu as le temp de m'expliquer en détaille le fonctionnement de ce code
    car c'est vrais que c'est largement moins lourd que ce que j'ai écrit mais j'aimerais bien comprendre plutôt que de faire un copier coller

    pour la précision sur le fichier j'ai mis mon fichier en exemple sur un autre post voici le lien tu pourras mieux juger ce que je souhaite

    http://www.developpez.net/forums/att...ion-final.zip/

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut revemane et le forum
    C'est mieux de comprendre ce qu'on fait

    Dim X As Integer
    Où que soient les déclarations dans le code elle sont traitées de la même menière : donc, il est plus "sain" de les déclarer en début de code (juste sous le titre).
    For X = 1 To 7
    Pour X allant de 1 à 7 (par pas de 1)
    Next X
    Passer à la valeur suivante de X.

    Sheets("TCOOLANT").Cells(65536, IIf(X < 4, X + 3, X + 5)).End(xlUp)(2) =
    IIf(Me.Controls("OptionButton" & ((X * 2) + 56)), "Liège", "Jemeppe")

    " _" suivi d'un changement de ligne veux simplement dire que l'instruction continue à la ligne suivante.

    IIf(X < 4, X + 3, X + 5) : c'est une instruction If, comme sur la feuille de calcul. Par rapport à l'autre en VBA, c'est qu'elle retourne une valeur.
    Ce qui donne :
    si X inférieur à 4 la valeur retournée est (X+3)
    si X égal ou supérieur à 4 la valeur retournée est (X+5) ce qui donne comme résultat dans la boucle : 4, 5, 6, 9, 10, 11, 12

    Cells(65536, Y).End(xlUp)(2) (avec Y valeur de l'instruction précédente).
    Cells(65536, Y).End(xlUp) : première cellule non vide de la colonne Y en partant de la ligne 65536 (dernière ligne sous version Excel 2003 et antérieures), et en remontant (xlUp). Ce qui revient à la dernière cellule non vide de la colonne Y
    (2) : cellule suivante : revient à Offset(1,0) pour cette instruction, mais en plus court et ne subit pas le rejet que l'instruction Copy a pour l'Offset.
    On va donc avoir la première cellule vide en fin des colonnes E, F, G, I, J, K, L.

    IIf(Me.Controls("OptionButton" & ((X * 2) + 56)), "Liège", "Jemeppe")
    ("OptionButton" & ((X * 2) + 56))
    ((X×2)+56) prendra les ici valeurs de 58 à 70
    L'instruction donnera un texte de OptionButton58 à OptionButton70

    Me.Controls("A")
    Me : représente l'objet support (ici ton USF)
    Controls("A") : le controle qui a pour nom (Name) A
    Une concaténation ne peut donner que du texte, pas directement un objet.
    Tes contrôles étant des optionbutton, ils ont 2 valeurs Vrai/True ou Faux/False.

    Voilà, voilà. et en donnant l'explication, je me rend compte que j'ai des loupés.
    Quand je disais que ton code était imbuvable .
    Pour pouvoir essayer d'extraire une récurrence, il a fallut que je les regroupe. et j'ai dû en effacer à ce moment.
    On en arrive à des logiques tordues, pour essayer de récupérer un système permettant d'avoir la bonne info. Il me semble préférable de renommer les OptionButtons, et ce dans plusieurs buts :
    - les rendre plus lisible
    - les associer plus facilement quand tu codes
    - les utiliser plus facilement dans le code.
    Comme c'est des OptionButtons, ils fonctionnent en groupe, il n'est donc pas nécessaire, normalement de tester chaque élèment d'un duo : si l'un est à vrai, l'autre est forcément à faux et vice-versa.
    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Points : 75
    Points
    75
    Par défaut
    merci pour les explications maintenant je vais essayer de traduire tout ca

Discussions similaires

  1. Newbie : j'ai un soucis avec mon code
    Par arno_mrs13 dans le forum SGBD
    Réponses: 2
    Dernier message: 08/08/2007, 17h21
  2. [Conception] soucis avec mon code de recherche par un ou plusieurs critères
    Par jolipepage75 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 11/06/2006, 02h59
  3. Souci avec mon recordcount......
    Par WyLLoU dans le forum Access
    Réponses: 14
    Dernier message: 03/02/2006, 11h59
  4. Serveur/Client UDP: comment envoyer un fichier avec mon code
    Par danje dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/12/2005, 14h54
  5. petit soucis avec mon graveur
    Par Vador dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/11/2005, 14h58

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