Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2011, 15h29   #1
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 6
Points : 6
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 :
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
jbelleng est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 15h53   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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 :
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 :
1
2
3
maLigne = Range("  ").Row
 
'Cells(ligne, colonne).Row fonctionne également car Cells(ligne, colonne) renvoie un objet de type Range
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 16h22   #3
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 6
Points : 6
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.
jbelleng est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 16h35   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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 :
1
2
3
Range("F2").Value = "Paris"    'cellule arbitraire
Range("F2").Offset(0,-1)    'Cellule à gauche
Range("F2").Offset(0,1)    'Cellule à droite
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/08/2011, 16h56   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
En réponse au #1
Code :
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.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/08/2011, 09h49   #6
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 6
Points : 6
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 :
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 :
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
jbelleng est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 13h25   #7
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
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 :
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.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h44.


 
 
 
 
Partenaires

Hébergement Web