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 :

Utilisation d'un tableau nommé à partir d'un formulaire [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Utilisation d'un tableau nommé à partir d'un formulaire
    Bonjour à tous
    Je vais essayer d'être clair.
    Je suis en train de concevoir un "programme" d'enregistrement de données pour une compet où je vais avoir à compléter un tableau.
    Les concurrents (+ de 120) n'arrivant pas forcement dans l'ordre, j'ai créé un formulaire de saisie qui me permets d'enregistrer directement les valeurs de chaque concurrent.
    Nom : Capture.PNG
Affichages : 147
Taille : 6,6 Ko
    Le tableau qui reçoit les valeurs est classé par ordre de n° et est utilisé ensuite pour un calcul des pénalités.

    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
     
    ' Récupération de l'adresse de la cellule du n° recherché
     
              With ActiveSheet
              a = Range("tab_saisie1[N°]").Find(numequip).Address
              End With
     
              Range(a).Offset(0, 2).Select
              ActiveCell.Value = TextBox1.Value       'enregistrement du nb de CP
              Range(a).Offset(0, 3).Select
              ActiveCell.Value = TextBox2.Value       'enregistrement du KM1
              Range(a).Offset(0, 4).Select
              ActiveCell.Value = TextBox3.Value       'enregistrement du KM2
              Range(a).Offset(0, 5).Select
              ActiveCell.Value = TextBox4.Value       'enregistrement du KM2
    Tout fonctionne à merveille sauf pour l'enregistrement du concurrent n° 1.
    A chaque fois, les données sont enregistrées dans les cellules du concurrent n° 10 donc pas bon
    Je suppose que c'est au niveau de la sélection du tableau que je fais une erreur.
    Quelqu'un aura t'il la solution?
    Merci d'avance

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Mike, bonjour le forum,

    Ton code marche correctement chez moi... Essaie peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    Dim munequip As Integer
    Dim R As Range
    Dim a As String
     
    With ActiveSheet
        Set R = .Range("tab_saisie1[N°]").Find(numequip, , xlValues, xlWhole)
        If Not R Is Nothing Then a = R.Address
    End With
    Range(a).Offset(0, 2).Value = TextBox1.Value
    'etc.
    End Sub
    Évite les Select autant que tu le peux. Il ne font que ralentir l'exécution du code et sont source de plantages...
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre à l'essai Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bonjour Thautheme
    Effectivement, la solution proposée corrige mon problème...
    ...mais je dois avouer que je ne comprends pas tout: à quoi sert :"If Not R Is Nothing Then a = R.Address" ?

    Je n'aime pas recopier bêtement un code, j'aime bien comprendre le fonctionnement

    Pour les "select", cela me simplifie le code, si en plus, c'est plus rapide.
    Mais comme je ne suis pas un développeur chevronné, j'avance pas à pas. J'écris un bout, je teste, si ça fonctionne, je continue, etc, etc..
    merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    Dim numequip As Integer
    Dim R As Range
    Dim a As String
     
    With ActiveSheet
        Set R = .Range("tab_saisie1[N°]").Find(numequip, , xlValues, xlWhole)
        If Not R Is Nothing Then a = R.Address
    End With
    Range(a).Offset(0, 2).Value = TextBox1.Value
    'etc.
    End Sub
    Évite les Select autant que tu le peux. Il ne font que ralentir l'exécution du code et sont source de plantages...[/QUOTE]

  4. #4
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Mike, bonjour le forum,

    Quand on lance une recherche (Find), on n'est pas toujours sûr quelle aboutisse. Ce code permet de définir une variable de type Range (je l'ai appelée R dans mon exemple). xlValues signifie que la recherche se fait sur les valeurs et pas sur les formules. xlWhole signifie que la recherche se fait sur la valeur exacte. If Not R Is Nothing signifie s'il existe au moins une occurrence trouvée. C'est à dire qu'avant d'attribuer la propriété Address au résultat de la recherche, on teste d'abord si la recherche renvoie au moins une occurrence trouvée. Cela évite le bug évident si on demande l'adresse d'une plage/cellule qui n'existe pas... Je pense que le problème chez toi venait plus du xlWhole manquant. Dès qu'il rencontrait un 1 il s'arrêtait... Regarde l'aide VBA sur le mot clé Range.Find.
    À plus,

    Thauthème

    Je suis Charlie

  5. #5
    Membre à l'essai Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bonjour Thautheme et bonjour aux lecteurs

    Ton explication est claire, c'est une méthode que je n'avais pas utilisé jusqu'alors.
    Merci d'avoir pris du temps à m'aider.
    Mon programme fonctionne a présent bien.
    Je clôture donc la discussion.
    Cordialement,
    Michel

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

Discussions similaires

  1. [XL-2010] Tableau ou plage nommée à partir d'une liste d'élément variable
    Par calagan99 dans le forum Excel
    Réponses: 3
    Dernier message: 03/02/2014, 14h29
  2. [XL-2007] Utiliser F4 dans un tableau nommé
    Par devbz dans le forum Excel
    Réponses: 9
    Dernier message: 22/07/2013, 17h13
  3. Excel : Générer un tableau a partir de plusieurs
    Par Groov dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2006, 19h34
  4. Tableau a partir d'une requete sql
    Par 10-nice dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2004, 16h37
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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