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 :

Rappel de données pour modification dans userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut Rappel de données pour modification dans userform
    Bonjour,
    Voilà mon problème:
    J'ai créer un userform afin de pouvoir ajouter des données à un listing dans un tableau excel (Nom, Prenom, Adresse...)
    Par contre, je souhaiterai pouvoir rappeler certaines de ces données dans un userform afin de les modifier.
    Je m'explique: L'utilisateur sélectionnera une ligne ou cellule, et cliquera sur un bouton "Modification", et un userform apparaittra en reprenant les données du tableau, afin de pouvoir les modifier et de les remplacer dans le listing.
    Mais je ne sais pas du tout comment m'y prendre... je bloque un peu la...
    Peut on reprendre le même userform que celui pour la création ou dois-je en créer un nouveau identique?
    Quel code utiliser pour celà?
    Merci d'avance pour votre aide...

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    Peut on reprendre le même userform que celui pour la création ou dois-je en créer un nouveau identique?
    Bien sur que tu peux.
    Pour t'expliquer, ce serait plus facile de voir ton code !!.

    Un simple exemple pour transférer la cellule A1 de la feuille Sheet1 dans le controle Controletxt1 du userform Userform1 est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Userform1.Controletxt1 = Worksheets("Sheet1").Range("A1")
    A l'inverse pour sauver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("Sheet1").Range("A1") = Userform1.Controletxt1

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Ah ok, meric pour cette info, je vois un peu comment procédé à présent pour recharger mon userform avec les données existante.
    Par contre la question qui reste en suspend, c'est à l'aide de quel code lui définir la ligne a recharger dans le userform?!
    Je vais devoir passer par une boulce pour ça, ça ne devrait pas être un problème, mais il me manque l'information de savoir comment retrouver sur quel ligne l'utilisateur à cliquer...
    Je commence a écrire le code, et je te l'envoit.
    Merci pour ces informations

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Un moyen simple d'utiliser le mode "reverse" USF - Read-Write-Find.zip
    Si ça peut te donner des idées...
    Bon après-midi

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Ouskelnor
    Un moyen simple d'utiliser le mode "reverse" USF - Read-Write-Find.zip
    Waw.... C'est beau comme un camion.
    Dès que j'ai le temps j'essaierai de comprendre le fonctionnement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Merci pour le programme que tu m'as envoyé ouskel'n'or, mais je vais avoir un peu de mal avec ça je pense. Il faurdrait que je m'y plonge d'avantage.
    Sinon j'ai suivit la piste que m'as donné Godzestla, et ça marche trés bien, la userform se charge bien avec les données voulues.
    Mais il me reste un petit problème, pour le moment, il en charge que les données que je lui dit de charger (en l'occurence celle de la ligne 6 ici).
    Je voudrais savoir à présent quel code dois-je utiliser pour pouvoir faire un boucle et ainsi identifier la ligne (ou cellule) selectionné par l'utilisateur...

    Voici le code jusqu'à présent:
    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
    Private Sub ModifAdh_Click()
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
     
    Nouveau.ListBox1 = Range("A6")
    Nouveau.ComboBox1 = Range("B6")
    Nouveau.Nom = Range("C6")
    Nouveau.Prenom = Range("D6")
    Nouveau.Naissance = Range("K6")
    Nouveau.Rue = Range("E6")
    Nouveau.CodePostal = Range("F6")
    Nouveau.Ville = Range("G6")
    Nouveau.Mail = Range("H6")
    Nouveau.TelFixe = Range("I6")
    Nouveau.TelPort = Range("J6")
    Nouveau.ComboBox2 = Range("P6")
    Nouveau.TextBox11 = Range("Q6")
    Nouveau.Certif = Range("M6")
    Nouveau.FicheInscrip = Range("N6")
    Nouveau.Paiement = Range("O6")
     
    Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    End With
     
    End Sub
    Merci d'avance pour votre aide

  7. #7
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Je voudrais savoir à présent quel code dois-je utiliser pour pouvoir faire un boucle et ainsi identifier la ligne (ou cellule) selectionné par l'utilisateur...
    Peux-tu montrer ton code pour ce qui est en gras ? Ou dire comment la ligne cellule est sélectionnée.

    Car le code de Ousk gère cela, mais je dois t'avouer que j'ai aussi du mal avec ce code hyper puissant.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Ba justement pour le moment il n'y a rien de ça dans le code que j'ai écrit...
    C'est l'information qu'il me manque afin que je puisse créer une boucle à partir de ce que j'ai écrit précédemment comme code...
    Il me faut savoir comment déterminer sur quel ligne l'utilisateur à sélectionner afin que je puisse remplacer mais valeurs A6,B6,C6... par Ai, Bi, Ci avec i étant la ligne sélectionnée...
    Etant débutant dans le VBA, le programme de ouskel'n'or me parait trop costaud pour moi

  9. #9
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonjour,

    vois du côté de :

    ActiveCell.Row
    ActiveCell.Column
    ActiveCell.Address

    cordialement,

    Didier

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Je ne connait pas du tout cette fonction, mais j'ai cherché un peu.
    voilà ce que j'ai fait:

    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
    Private Sub ModifAdh_Click()
     
    Dim i 'Déclaration variable
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
    i = ActiveCell.Row 'Attribut à i la ligne sélectionnée
    'Nouveau.ListBox1 = Range("A" & i)
    'Nouveau.ComboBox1 = Range("B" & i)
     
    Nouveau.Nom = Range("C" & i)
    Nouveau.Prenom = Range("D" & i)
    Nouveau.Rue = Range("E" & i)
     
    Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    End With
     
    End Sub
    J'ai utilisé une variable i afin de lui associé le numéro de la ligne que l'utilisateur à sélectionnée
    Mais le problème c'est que ça ne fonctionne toujours pas, il me renvoit juste la valeur pour le champs "Nom", mais s'arrète la... rien pour le Prénom et Adresse, et je ne comprend pas pourquoi.
    Merci pour votre aide

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Comme le dit Ormonth :

    puisque vous voulez utiliser la variable "i" :

    ensuite vous pouvez utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xxxxx = Range("A" & i)
    yyyyy = Range("C"& i)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xxxxx = Cells(i, 1)
    yyyyy = Cells(i, 3)
    dans ce dernier cas "1" et "3" représentent les N° de colonne

  12. #12
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour à tous,

    petite info complémentaire, lorsque tu utilises la méthode With Sheets("machin")...End With il faut mettre un point devant Range ou Cells ou tout autre objet pour signaler à VBA que ce Range est celui de la feuille Sheets("machin") sinon il prendra les cellules de la feuille active.

    Lorsqu'on envoie des valeurs d'une cellule vers une textbox, il est parfois nécessaire de préciser que l'on veut le texte afficher dans la cellule (et pas forcément la valeur)
    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
    Private Sub ModifAdh_Click()
     
    Dim i 'Déclaration variable
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
        i = .ActiveCell.Row 'Attribut à i la ligne sélectionnée
        'Nouveau.ListBox1 = .Range("A" & i).Text
        'Nouveau.ComboBox1 = .Range("B" & i).Text
     
        Nouveau.Nom = .Range("C" & i).Text
        Nouveau.Prenom = .Range("D" & i).Text
        Nouveau.Rue = .Range("E" & i).Text
     
        Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    End With
     
    End Sub

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Merci à toi pour cette précision, j'ai rectifier le code!!

    Par contre mon problème reste toujours le même...
    A l'execution du programme, la valeur du "Nom" dans ma userform se met bien, mais rien pour les autres valeurs... Et je ne comprend pas du tout pourquoi??

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ModifAdh_Click()
     
    Dim i 'Déclaration variable
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
        i = ActiveCell.Row 'Attribut à i la ligne sélectionnée
        Nouveau.Nom = .Range("C" & i).Text 
        Nouveau.Prenom = .Range("D" & i).Text
        Nouveau.Rue = .Range("E" & i).Text
        Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    End With
     
    End Sub
    Merci de pouvoir m'éclairer sur ce problème...

  14. #14
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    personnellement j'essaierais en enlevant le .text qui me semble inutile, voire source de problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nouveau.Nom = .Range("C" & i).Text 
    Ensuite si cela ne suffit pas je verrais avec mon ami Debug.


  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quand tu mets "Unload Nouveau", Nouveau n'existe plus. Si tu veux le renseigner de nouveau, commence par Load Nouveau ou Nouveau.show, puis renseigne ses contrôles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
        i = ActiveCell.Row 'Attribut à i la ligne sélectionnée
        Nouveau.Nom = .Range("C" & i).Text 
        Nouveau.Prenom = .Range("D" & i).Text
        Nouveau.Rue = .Range("E" & i).Text
    End With
    C'est un méthode pour effacer Nouveau... mais il y en a d'autres...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Je viens d'essayer avec le code que tu m'as donné, c'est a dire effacer les anciennes données et afficher la userform avant le chargement des données...
    Mais rien n'y fait, toujours le même résultat...
    Il ne me change que le prmeier paramètre, en l'occurence "Nom" dans ma userform, et me conserve les anciennes données pour le reste ("Malgrés la commande "Unload Nouveau")
    J'ai essayer aussi de remplacer la varibale "i" par "ActiveCell.Row", mais ça ne change rien à mon problème (je pensais que peut être le problème venait de ma boucle, mais pas ça apparament...)

    Merci si vous pouvez m'éclaircir un peu plus sur ce problème...

  17. #17
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Bonjour,

    personnellement j'essaierais en enlevant le .text qui me semble inutile, voire source de problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nouveau.Nom = .Range("C" & i).Text 
    Ensuite si cela ne suffit pas je verrais avec mon ami Debug.

    Que du contraire...c'est en ne le mettant pas que tu risques des surprises vu qu'il prendra la valeur et la valeur n'est pas forcément ce que tu vois dans la cellule

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A toutes fins utiles et à vérifier, je viens d'essayer votre procédure avec une modification :

    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
    Private Sub ModifAdh_Click()
     
    Dim i 'Déclaration variable
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    Load Nouveau 
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
    i = ActiveCell.Row 'Attribut à i la ligne sélectionnée
     
    Nouveau.Nom = .Range("C" & i)
    Nouveau.Prenom = .Range("D" & i)
    Nouveau.Rue = .Range("E" & i)
     
    
    End With
     Nouveau.Show
    End Sub
    Dernière modification par fring ; 10/09/2008 à 21h48.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Bonjour à tous!
    Tout d'abord merci poru votre aide, elle m'as été précieuse come à chaque fois!!
    Bon j'ai résolu mon problème. En fait, dans ma userform, j'utilisé les propriétés des textbox(notamment RowSource) pour pouvoir renvoyer la valeur dans le tableau(et oui, comme je réutilise la userform de création pour la modification). Et aprés un essait en utilisant que le VBA et supprimant toutes ces propriétés, le code fonctionne enfin!!!
    Je vous transmet le code, pour que ça puisse servir à d'autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ModifAdh_Click()
     
    Dim i 'Déclaration variable
    Unload Nouveau  'Efface toutes les anciennes données de la userform
    With Worksheets("Listing") 'Travail avec la feuille "Listing"
        i = ActiveCell.Row 'Attribut à i la ligne sélectionnée
        Nouveau.Nom = Range("C" & i)
        Nouveau.Prenom = Range("D" & i)
        Nouveau.Rue = Range("E" & i)
    Nouveau.Show 'Affichage de la Userform Nouveau Adhérent
    End With
     
    End Sub
    Par contre une question me reste ne suspend pour finaliser cette partie de programme. Dans la userform, j'utilise une image. Le chemin d'accés (en hypertexte) est répertorié dans une cellule de mon tableau.
    Quelqu'un aurait une idée de la façon dont je puisse rappeler la photo pour l'afficher dans la userform lors d'une modification?
    Merci encore pour votre aide en tout cas!!

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    F1 sur Picture te donnera la solution
    Bonne nuit

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraire des données pour mettre dans une BD
    Par luciedoudou dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 21/02/2008, 14h17
  2. Extraire des données pour mettre dans une BD
    Par luciedoudou dans le forum Excel
    Réponses: 7
    Dernier message: 21/02/2008, 10h19
  3. Récupération de données pour mettre dans un fichier .txt
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 24/01/2008, 11h29
  4. [MVC] récupérer une ligne d'une base de donnée pour modification
    Par myriam818 dans le forum Spring Web
    Réponses: 1
    Dernier message: 14/12/2007, 10h46
  5. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13

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