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 :

Formulaire, copier une textbox dans la même ligne que les autres [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Formulaire, copier une textbox dans la même ligne que les autres
    Bonjour à tous,

    J'ai construit un formulaire avec des textboxs qui permettent de copier le texte entré dans la première ligne vide d'une colonne donnée.

    J'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("direct").Range("B65536").End(xlUp).Offset(1, 0).Value = ComboBox2
    Or, j'ai une textbox "commentaire" où la saisie de données n'est pas obligatoire. La ligne est alors laissée vide quand l'utilisateur ne saisie rien.

    Cela créé donc un décalage. Je cherche donc à ce que les données de cette textbox ne soient pas saisies dans la première ligne non vide mais plutôt dans la même ligne que les autres textboxs.

    Merci à tous pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    J'avoue ne pas avoir bien saisi ta question...

    Si tu connais le numéro de ligne tu peux accéder à la cellule en question via la collection Cells:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(numéro_ligne, numéro_colonne).Value =
    Pour récupérer le numéro d'une cellule donnée à un moment dans le code, tu peux utiliser la propriété Row d'un objet Range:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maLigne = Range("  ").Row
     
    'Cells(ligne, colonne).Row fonctionne également car Cells(ligne, colonne) renvoie un objet de type Range

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Ok désolé je reformule

    Je ne connais pas à l'avance le numéro de la cellule tu tableau où devra être inscrite la donnée.
    Mon formulaire me permet de saisir des informations dans un tableau Excel. Il y a dans ce formulaire des textboxs. A chaque fois que l'utilisateur utilise le formulaire pour entrer des données, les données saisies dans ces textboxs doivent être copier à la suite des autres dans le tableau.
    Je ne connais pas à l'avance le numéro de la cellule tu tableau où devra être inscrite la donnée.

    Exemple:
    1ere utilisation du formulaire:
    Textbox 1: Jean Michel inscris dans la cellule A2
    Textbox 2: Paris inscris dans la cellule B2
    Textbox 3: Marié inscris dans la cellule C2
    Textbox 4 (Commentaire): (vide) en D2

    2eme utilisation du formulaire:
    Textbox1: Jean Jacques inscris dans la cellule A3
    Textbox2: Evry en B3
    Textbox3: Divorcé en C3
    Textbox4 (commentaire): Concubinage inscris en D2

    Avec mon code actuel, le texte de la textbox commentaire est inscris à la suite de la dernière ligne remplie. Et le commentaire concubinage est inscris une ligne trop haut.

    Je voudrais donc que pour cette textbox, le text soit saisie dans la même ligne que la textbox1, non pas dans la première colonne vide.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Ok. Dans ce cas, j'imagine qu'au moins une de tes Textbox doit être obligatoirement remplie.

    Il suffit alors de chercher la première cellule vide dans la colonne correspondante à cette Textbox et de remplir les autres lignes en utilisant leur position relative à la cellulle de la Textbox obligatoire.

    En prenant une cellule arbitraire pour la cellule "obligatoire":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("F2").Value = "Paris"    'cellule arbitraire
    Range("F2").Offset(0,-1)    'Cellule à gauche
    Range("F2").Offset(0,1)    'Cellule à droite

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    En réponse au #1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("direct")
        With .Cells(.Rows.Count, 2).End(xlUp)
            .Offset(1, 0).Value = ComboBox2
            .Offset(1, 1).Value = TextBox2
        End With
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre aide.

    @ Sclarckone: J'ai procédé en adaptant ton code au miens en prenant pour référence la cellule de gauche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("direct").Range("J65536").End(xlUp).Offset(0, 1).Value = TextBox1.Value
    @ mercatog: Si j'ai bien compris, ton code permet de simplifier.
    On peut mettre tous les codes à la suite dans le With...end with plutôt que que répéter à chaque fois l'opération pour chaque colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("direct").Range("H65536").End(xlUp).Offset(1, 0).Value = TxtPourcentCA.Value
    Sheets("direct").Range("J65536").End(xlUp).Offset(0, 1).Value = TextBox1.Value 
    ' ...etc
    Faudrait alors que je refasse mon code, mais j'ai peur de le planter.
    Je vais essayer.

    Merci à vous en tout cas

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Avoir peur de structurer son code est un risque profitable à prendre.
    Au lieu de chercher la dernière ligne de chaque colonne, ci joint code permettant de chercher le ligne en question en colonne B et permet de dispatcher les données vers les colonnes de la même lignes à l'aide de l'offset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Sheets("direct")
        With .Cells(.Rows.Count, "B").End(xlUp)(2)     'Cellule vide juste après la dernière cellule remplie de la colonne B
            .Value = ComboBox2                       'Colonne B
            .Offset(0, 1).Value = TextBox2           'Colonne C sur la même ligne
            .Offset(0, 2).Value = TextBox3           'Colonne D sur la même ligne
         '......la suite
        End With
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. Copier coller une cellule dans la même cellule d'un autre classeur
    Par Tho69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/08/2013, 10h59
  2. Réponses: 6
    Dernier message: 02/08/2009, 12h39
  3. Réponses: 2
    Dernier message: 10/07/2008, 14h39
  4. Réponses: 7
    Dernier message: 21/09/2006, 08h44
  5. VBA-Excel copier la valeur d'une textbox dans une cellule
    Par GrandGarfield dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/08/2006, 10h15

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