Question sur VBA excel

Signaler
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008
-
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008
-
Bonjour tout le monde, alors je vais tenter de vos expliquer mon problème.
J'ai un userform avec une liste deroulante, j'aimerai que quand une valeur est choisie dans la liste (valeur deja dans excel) et que l'utilisateur clik sur ok ça recherche la valeur en l'occurence du texte dans la premiere page d'excel et que ça recopie et la valeur et toute la ligne dans la seconde feuille a un endroit bien precis. Mais je n'est aucune idée de comment m'y prendre!
Est ce que quelqu'un peu m'aider?
Merci

10 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu devrais utiliser Find pour trouver l'occurence de ta valeur.
Quelque chose comme

Dim Recherche As rangeSet Recherche Sheets(" Feuil1 ").<gras>Cells.Find(Listbox1.Text, LookIn:</gras>xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing then
    Msgbox Recherche.row  'ici tu peux faire Rows(recherche.Row).Copy
End If

Regarde les paramètres de la fonction Find dans ton aide pour savoir lesquels tu pourrais avoir besoin.

Tu peux changer Cells par Columns("A") pour rechercher uniquement dans cette colonne ou un Range quelconque... Et tu changes Feuil1 et Listbox1 par les bons noms...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Bonjour Mpi,
alors j'ai suivi ton code j'ai donc mis dans l'évenement change de ma liste deroulante :

Private Sub type_dact_Change()
 Dim Recherche As Range
Set Recherche = Sheets("abonnements").Cells.Find(type_dact.Text, LookIn:=xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing Then
    Rows(Recherche.Row).Copy
End If
End Sub

Alors ça marche parce que ca copi la ligne voulu ( pointillé autour de la ligne) mais ça ne la colle pas. J'aimerai que l'activité donc le texte de la cellule de la colonne A se mette dans la feuille calculs à la case B2 et que le reste de la ligne se mette de B4 à F4.
Est ce que cela est possible?
Et est ce que c'est possible de mette ce sode dans l'évenemen click de OK?Merci de votre aide.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
J'utiliserais l'événement Click plutôt que Change.

Dans ton code il n'y a que la partie Copy. Il te faut maintenant utiliser Paste ou PasteSpecial pour coller. Comme tu ne veux pas copier toute la ligne, tu ne peux plus utiliser Rows, mais plutôt un Range. En fait, si tu copies toute une ligne et que tu colles en A, il n'y a pas de problème. Si tu veux la coller en B, là, il y a un problème; il manque une cellule pour le collage...

Private Sub type_dact_Change()
    Dim Recherche As Range
    Set Recherche = Sheets("abonnements").Cells.Find(type_dact.Text, LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then
        Range("A" & Recherche.Row).Copy Sheets("calculs").Range("B2")
        Range("B" & Recherche.Row & ":F" & Recherche.Row).Copy Sheets("calculs").Range("B4")

    End If
End Sub

Tu pourrais aussi le faire comme ceci
    Range("A" & Recherche.Row).Copy
    Sheets("calculs").Range("B2").PasteSpecial
    Range("B" & Recherche.Row & ":F" & Recherche.Row).Copy
    Sheets("calculs").Range("B4").PasteSpecial

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Merci plus que tout Mpi cela marche, je suis trop contente.
Mais un beug car je rentre donc les info sur le userform UTIL je clik sur ok, les info se mettent bien mais quand je veux le refaire, il y a encore les valeurs dans excel et là ça me met des trucs très bizarre. Ca me recopie des trucs partout. Commen faire pour que quand on click sur OK sur le Userform REPONSE les cases copies se reinitialize?
Merci encore pour ton coup de pouce qui est plus un coup de main d'ailleurs.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Désolé, mais je ne comprends pas vraiment...(?)
Peux-tu expliquer un peu plus ? N'oublie pas que je n'ai jamais vu ton programme...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Oui pardon, alors en fet mon programme consiste a aider un utilisateur a choisir entre plusieurs forfait suivant le nombre de frequentation par moi.
J'ai un userform pour l'administrateur qui rentre les different forfait et prix qui se marque sur la feuille abonnement.
Et j'ai un userform de l'utilisateur, celui dont je te parle qui contient une liste deroulante ou il va choisir l'activité qu'il desire et une case ou il va rentrer sa frequentation.
Grace a toi, quand il click sur OK l'activité qu'il a choisie est rechercher dans la feuille abonnement et est recopié dans la feuille calculs.
La est le probleme, quand l'utilisateur a la reponse, une question lui est posé pour savoir s'il veut une autre info si oui il retombe sur le userform ou il y a la liste deroulant et la case frequentation mais comme les cases d'excel ont gardé les valeurs d'avant y a un beug dans le copiage de l'activité sur la feuille calculs alor je voulais savoir comment je pouvais faire pour que les cases à variables de la feuille excel se reinitialise quand il click sur OK du userform qui contient sa reponse.
J'espere que tu a compri.
Merci pour ton aide.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ça semble plus clair...

Ben il n'y a pas de recette miracle. C'est à toi, après avoir copier les données sur la feuille, d'effacer tous les contrôles qui contiennent les entrées de l'utilisateur.
Textbox1 = ""
Textbox2 = ""

S'il y a de nombreux textbox, tu pourrais aussi créer une boucle avec la collection Controls.
For i = 1 to nbTextbox
    Me.Controls("Textbox" & i) = ""
Next

Mais peut-être aussi que ça peut dépendre comment tu charges ces textbox (?) si ce sont bien des textbox dont on parle...

Et si je semble avoir mal compris encore une fois, il serait bien que tu mettes le bout de code que tu as dans le bouton OK. Ce sera probablement plus simple de t'aider.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Oui d'accord pour cela mais comment faire pour que les valeurs cases dans excel s'effacent?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Encore une fois, ce serait plus simple si on voyait ton code

Rows(4) = "" ou vbNullString
ou
Rows(4).ClearContents 'efface le contenu
ou
Rows(4).Clear  'efface tout, contenu, formatage...

et tu peux changer le 4 par une variable

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Oui pardon, alors mon code OK dans le userform est le suivant:

Private Sub OK_Click()
Dim Recherche As Range
    Set Recherche = Sheets("abonnements").Cells.Find(type_dact.Text, LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then
        Range("A" & Recherche.Row).Copy
        Sheets("calculs").Range("B2").PasteSpecial
        Range("B" & Recherche.Row & ":F" & Recherche.Row).Copy
        Sheets("calculs").Range("B4").PasteSpecial
    End If
    UTIL.Hide
    REPONSE.Show
End Sub

Alors en fait, j'aimerai que quand on click sur OK du userform UTIL, je recupere dans le textbox du userform REPONSE la case B10 de la feuille Calculs. alors j'ai fait:

Private Sub RecupererCalcul()
Sheets("calculs").Activate                   
conseil = Worksheets("calculs").Range("B10") 
End Sub
Mais je ne sais pas où mettre:
call RecupererCalcul

Et aussi j'aimerai que quand on click sur OK du userform REPONSE, les valeurs qui ont été copié dans la feuille Calculs soient effacer donc B1 B2 B4 C4 D4 E4 F4.
Voila mon code de OK du userform REPONSE:

Private Sub OK_Click()
 Message = MsgBox("Voulez-vous une autre information?", vbYesNo + vbQuestion, "AUTRE") 
   If Message = vbNo Then             
   so = MsgBox("Merci de votre attention, à très bientôt dans notre complexe sportif", , "AUREVOIR") 
      REPONSE.Hide                  
    Else                             
   If Message = vbYes Then           
    REPONSE.Hide                      
    UTIL.Show                       
   End If
   End If
End Sub

Voila merci de votre aide.