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 :

Problème syntaxe avec Range Formula VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut Problème syntaxe avec Range Formula VBA
    Bonjour,

    Je voudrais afficher les valeur ("B5:E5") de la feuille 1-1, 1-2,...,1-20 dans ("B20:E20").

    Quand j'écris ceci, ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ListBox1_change()
    Dim Val_Indice As Byte
        Val_Indice = Me.ListBox1.ListIndex
        Me.Label2.Caption = "Cylindres : 1/" & Me.ListBox1.List(Val_Indice)
        If FeuilleExiste("1-" & Me.ListBox1.List(Val_Indice)) = True Then
            Range("B20:E20").Value = Sheets("1-" & Me.ListBox1.List(Val_Indice)).Range("B5:E5").Value
        Else
            Unload UserForm1
            MsgBox "Cette cage n'existe pas, sélectionnez une autre cage"
            UserForm1.Show
        End If
    End Sub
    Mais si je modifie des valeurs dans les cellules B5:E5 de la feuille 1-x ça ne se modifie pas dans les cellules B20:E20 de la feuille active. J'ai essayé en utilisant Range formula de toutes sortes de façons mais je ne trouve pas la bonne syntaxe. Voici le genre de chose que j'ai essayée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ListBox1_change()
    Dim Val_Indice As Byte
        Val_Indice = Me.ListBox1.ListIndex
        Me.Label2.Caption = "Cylindres : 1/" & Me.ListBox1.List(Val_Indice)
        If FeuilleExiste("1-" & Me.ListBox1.List(Val_Indice)) = True Then
            Range("B20:E20").Formula = "=" & Sheets("1-" & Me.ListBox1.List(Val_Indice)).Range("B5:E5")
        Else
            Unload UserForm1
            MsgBox "Cette cage n'existe pas, sélectionnez une autre cage"
            UserForm1.Show
        End If
    End Sub
    Voilà si quelqu'un peut m'aider...

    Merci à vous

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Avec "Val_Indice = Me.ListBox1.ListIndex" auquel il faut ajouter 1, vous obtenez le N° d'indice, pas besoin de rappeler" Me.ListBox1.ListIndex" dans la ligne de sélection de la feuille, ceci devrait aller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Val_Indice = Me.ListBox1.ListIndex + 1
     
    Range("B20:E20").Value = Sheets("1-" & Val_Indice).Range("B5:E5").Value
    Cdlt

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Avec "Val_Indice = Me.ListBox1.ListIndex" auquel il faut ajouter 1, vous obtenez le N° d'indice, pas besoin de rappeler" Me.ListBox1.ListIndex" dans la ligne de sélection de la feuille, ceci devrait aller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Val_Indice = Me.ListBox1.ListIndex + 1
     
    Range("B20:E20").Value = Sheets("1-" & Val_Indice).Range("B5:E5").Value
    Cdlt
    Bonjour Arturo83,

    Merci pour ta réponse mais en utilisant le ce code ça reproduit ce que j'avais fait. Ça copie les valeur B5:E5 dans B20:E20, mais après quand je modifie des valeurs dans B5:E5 ça ne les modifies pas dans B20:E20.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourquoi dois-tu passer par du VBA? Une simple formule ne suffirait pas? si tu passes par du VBA, soit tu mets la formule, soit tu dois travailler sur l'évènement Change de la feuille ou des feuilles concernées.

    Pourrais-tu expliquer plus en détails ce que tu souhaites réaliser?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Pourquoi dois-tu passer par du VBA? Une simple formule ne suffirait pas? si tu passes par du VBA, soit tu mets la formule, soit tu dois travailler sur l'évènement Change de la feuille ou des feuilles concernées.

    Pourrais-tu expliquer plus en détails ce que tu souhaites réaliser?
    Bonjour Pierre,

    Je travaille dans un laminoir, nous fabriquons du fil en acier qui passe dans différentes cages afin de réduire son diamètre. Ces cages sont composée de deux cylindres qui donnent la forme au fil en le faisant passer dans des cannelures. Dans chaque cylindre il y a plusieurs cannelures. Tous les jours je dois rentrer dans un fichier le tonnage effectué dans chaque cannelure pour changer celle-ci en fonction du diamètre voulu ou de l'usure de la cannelure (tonnage maxi).

    Il y a pas mal de cages à gérer et rentré le tonnage cage par cage me prend pas mal de temps. j'essaie donc de faire un fichier où je sélectionne cages et cannelures à changer (via un userform). Puis, le lendemain, quand je rentre le tonnage de la nuit, ça me l’envoi directement dans les bonnes cannelures.

    Parfois s'il y des incidents la nuit et qu'on a changé une cage je voudrais pouvoir aller changer certaines valeurs "manuellement" c'est pour cela que je voulais utiliser Range Formula.

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Il y a quelque chose de bizarre, votre code est attribué à l'évènement d'une listbox, donc ce sont des valeurs que vous saisissez dans une listbox mais après, vous écrivez:

    Mais si je modifie des valeurs dans les cellules B5:E5 de la feuille 1-x ça ne se modifie pas dans les cellules B20:E20 de la feuille active
    ici, vous modifiez les valeurs directement dans les cellules de la feuille, alors la question suivante est: où sont saisies les données? dans une listbox ou dans une cellule?
    Si c'est dans une cellule alors, il faut que vous mettiez le code dans le module de la feuille avec l'évènement "Change" qui détectera toute modification de valeur dans la cellule.

    Comme on ne connait pas comment est fait votre fichier, on ne peut faire des propositions qui peuvent ne pas marcher, la solution par formule que vous a suggéré Pierre FAUCONNIER est-elle applicable dans votre cas?

    Cdlt

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Il y a quelque chose de bizarre, votre code est attribué à l'évènement d'une listbox, donc ce sont des valeurs que vous saisissez dans une listbox mais après, vous écrivez:



    ici, vous modifiez les valeurs directement dans les cellules de la feuille, alors la question suivante est: où sont saisies les données? dans une listbox ou dans une cellule?
    Si c'est dans une cellule alors, il faut que vous mettiez le code dans le module de la feuille avec l'évènement "Change" qui détectera toute modification de valeur dans la cellule.

    Comme on ne connait pas comment est fait votre fichier, on ne peut faire des propositions qui peuvent ne pas marcher, la solution par formule que vous a suggéré Pierre FAUCONNIER est-elle applicable dans votre cas?

    Cdlt
    Bonjour,

    Normalement on ne doit pas modifier les données directement dans la feuille sauf parfois en cas de casse d'un cylindre pendant la production. Son tonage ne correspond alors plus à celui de autres Cylindres.

    Par ailleurs, j'ai essayé "change" ça fonctionne bien.

    Cordialement,

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si tu veux passer une formule, tu dois recomposer un texte qui correspond à une formule, puis le passer à la propriété Formula de la plage. Je te conseille de passer par une variable Formula pour pouvoir tester la cohérence de la formule que tu recrées. Comme le nom de ta feuille commence par 1-, tu dois encadrer le nom de la feuille avec des apostrophes, sinon Excel va comprendre que tu veux réaliser une soustraction: 1 - ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim Val_Indice As Long
      Dim Formula As String
     
      Val_Indice = ListBox1.ListIndex
      Formula = "='1-" & Me.ListBox1.Value & "'!B5:E5"
      Range("B20:E20").Formula = Formula

    PS: Je ne suis pas convaincu par l'organisation de ton classeur.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Si tu veux passer une formule, tu dois recomposer un texte qui correspond à une formule, puis le passer à la propriété Formula de la plage. Je te conseille de passer par une variable Formula pour pouvoir tester la cohérence de la formule que tu recrées. Comme le nom de ta feuille commence par 1-, tu dois encadrer le nom de la feuille avec des apostrophes, sinon Excel va comprendre que tu veux réaliser une soustraction: 1 - ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim Val_Indice As Long
      Dim Formula As String
     
      Val_Indice = ListBox1.ListIndex
      Formula = "='1-" & Me.ListBox1.Value & "'!B5:E5"
      Range("B20:E20").Formula = Formula

    PS: Je ne suis pas convaincu par l'organisation de ton classeur.
    Bonjour,

    J'ai essayé avec "change" ça fonctionne bien mais à mon avis ça sera plus simple avec formula.

    Je sais, mon classeur à l'air bizarre, mais je débute avec les macros.

    Je pourrai peut-être le publier quand il sera fini (enfin je ne sais pas si ça se fait...). Pour le moment ce n'est qu'un brouillon. Je fais ça le soir qu'à d j'ai le temps...

    Bien à vous,

Discussions similaires

  1. [XL-2019] Problème de variable avec Range.Formula
    Par TitiPointCom67 dans le forum Excel
    Réponses: 10
    Dernier message: 15/02/2022, 18h27
  2. [XL-2013] Problème de syntaxe avec Range
    Par licpegpon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/04/2019, 17h27
  3. problème syntaxe avec structure et constructeur
    Par identifiant_bidon dans le forum C++
    Réponses: 5
    Dernier message: 27/09/2007, 14h29
  4. Réponses: 7
    Dernier message: 16/09/2007, 09h29
  5. Problème avec Range.Formula
    Par zerti dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/07/2007, 17h25

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