Userform et selection manuel de cellules

bdx-77

XLDnaute Junior
Bonsoir !

Je ne sais pas trop si je m'exprime bien dans mon titre, mais j'expose mon histoire.

J'ai un tableau, un bouton me permet de lancer une sorte de boite à outils (userform), la, il y a (entre autre) 3 boutons: btn_vert/btn_jaune/btn_rouge.

J'aimerai, quand la fenêtre est ouverte, pouvoir selectionner un cellule, et cliquer sur l'un des boutons. Actuellement, je ne peux pas changer de cellule si je ne ferme pas l'userform.

Est-ce possible de "libéré" les cellules? ou dois-je m'y prendre autrement, si oui, comment?

Bonne soirée, bonne nuit,

Cordialement,
Vincent

Ps: comment s'appelle le nom anglais pour mettre plusieurs ligne dans une zone de texte? en gros qu'il soit possible de faire "entrer"
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Merci pour ce post !!!

Je regarde ca... ca fait ce que je veux, merci encore, mais j'ai une question: tu mets 200 lignes, mais c'est long le calcul, est-ce que ca irai plus vite de compter le nombre de ligne, et ensuite de faire les fusions selon ce nombre??

Merci

Vincent
 

alex67800

XLDnaute Impliqué
Re : Userform et selection manuel de cellules

Bonjour Vincent,
Si tu regarde les codes du module1 dans le fichier que je t'ai joint, je compte effectivement les lignes.
Car ne sachant combien tu en auras et cela m'ennuyais également. 200 était un essai.;)

Code:
Sub tri_colonne()
[COLOR="Red"]Range("A17:J" & Range("A65536").End(xlUp).Row).Select[/COLOR]
Code:
Sub Ajout_valeur()
Dim c As Range
Dim wsBD As Worksheet
Set wsBD = Worksheets("Plan d'action")
Set c = [COLOR="red"]wsBD.Range("A17:A" & Range("A65536").End(xlUp).Row)[/COLOR]
Code:
Sub Fusion_cellule()
Dim l As Long       ' ligne
Dim d As Long       ' doubles
Dim c As Integer    ' colonne
Dim maxl As Long
Const minl = 17      ' début ligne
maxl = [COLOR="red"]Range("A65536").End(xlUp).Row [/COLOR]' fin ligne

Comment comptes-tu renseigner ta feuille plan d'action? Je suppose avec le multipage de ton usf. Dans ce cas il ne faudrat pas oublier que chaque saisie alimente ta colonne A, avec 1,2 ou 3 en fonction des priorités.
Car c'est cette colonne qui est la référence aux macros que je t'ai proposé.

A te lire!
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Bonjour,

Merci pour ton post, je vais voir ça !!

Pour ce qui est de renseigner "coûts" ... je récupère les valeurs du tableau de la 1ière page, et ensuite, je ne sais pas encore...
Pour l'instant, je voudrais récupéré les colonnes qui m'intéresse, coller tout dans la page plan d'action, et ensuite, bah, on verra bien...


Cordialement,
Vincent
 

alex67800

XLDnaute Impliqué
Re : Userform et selection manuel de cellules

Bonjour Vincent,
Ton code enregistrer_click m'a interpellé, aussi je te propose de le simplifier comme ceci (quand c'est comme ça j'aime me creuser la tête lol):
Code:
    Dim x As Control
  With Sheets("Fiche_d_evaluation_des_risques")
        Nl = .Range("B65536").End(xlUp).Row + 1    'Facturation comptable
    .Range("B" & Nl).FormulaR1C1 = "=R[-1]C+1"
    .Range("C" & Nl).Value = TextBox1.Value 'Situation dangeureuse
    .Range("E" & Nl).Value = TextBox2.Value ' Dommage éventuel
    .Range("L" & Nl).Value = TextBox3.Value ' Moyen éxistant
    .Range("M" & Nl).Value = TextBox4.Value ' Moyen à proposer
    .Range("N" & Nl).Value = TextBox5.Value ' Commentaires
          For Each x In Frame1.Controls ' Contôle ma valeur des boutons si true
              If x.Value = True Then
                .Range("H" & Nl).Value = x.Caption 'Taux de fréquence
              End If
          Next
          For Each x In Frame2.Controls
             If x.Value = True Then
               .Range("i" & Nl).Value = x.Caption 'Taux de gravité
              End If
          Next
    .Range("J" & Nl).FormulaR1C1 = _
        "=RC[-2]*RC[-1]*RC[1]&CHAR(10)&""Risque ""&IF(RC[1]=1,IF(RC[7]=1,""Prioritaire"",IF(RC[7]=2,""Sérieux"",""Mineur"")),IF(RC[1]=0.5,IF(RC[8]=2,""Sérieux"",""Mineur""),""Mineur""))" ' Commentaires
    [COLOR="Green"]'.Range("K" & N1).FormulaR1C1 = "=IF(AND(NOT(RC[1]=""""),NOT(RC[3]="""")),0.5,IF(AND(NOT(RC[1]=""""),RC[3]=""""),0.25,1))"[/COLOR]    
    .Range("Q" & Nl).FormulaR1C1 = "=HLOOKUP(RC[-8],R7C5:R11C9,RC[-9]+1)"
    .Range("R" & Nl).FormulaR1C1 = "=HLOOKUP(RC[-9],R7C5:R11C9,RC[-10]+1)+1"
    .Range("S" & Nl).FormulaR1C1 = "=ROUNDUP(RC[-2]+1,0)"

    End With

Seule la formule pour la colonne K me cause problème et crée un Bug, et là je ne vois pas ce qui ne va pas, lal formule correpond à ce que tu as mis manuellement. Si un forumeur passant par là pouvait m'éclairer?

A+.
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Bonjour !!

Merci pour tes recherches !!

J'ai un petit commentaire: en utilisant ta formule, ça ne mets pas en forme la ligne rajouter, il faut donc garder une partie du code que j'avais déjà?!?!

Pour le reste, je vois ça demain, je n'ai pas l'temps ce soir.

Encore merci

Vincent
 

alex67800

XLDnaute Impliqué
Re : Userform et selection manuel de cellules

Re,
En effet je ni avais pas pensé.
Code:
Private Sub Enregistrer_Click()
    Dim x As Control
'
' Ajout d'une ligne
   If Not (OptionButton1 Or OptionButton2 Or OptionButton3 Or OptionButton4) Then
    MsgBox "Veuillez selectionner un choix dans" & " " & Frame1.Caption, vbExclamation
    OptionButton1.SetFocus
    Exit Sub
    End If
   If Not (OptionButton5 Or OptionButton6 Or OptionButton7 Or OptionButton8) Then
    MsgBox "Veuillez selectionner un choix dans" & " " & Frame2.Caption, vbExclamation
    OptionButton5.SetFocus
    Exit Sub
    End If


'Aller en B17 (début du tableau)
Range("B19").Select

'Aller à la dernière remplie
[B65536].End(xlUp).Select

'Quand la dernière valeur du tableau est trouvée, sélectionner le nombre de colonnes concernées
ActiveCell.Range("A1:S1").Select

'Recopier le contenu sur une ligne vers le bas
Selection.AutoFill Destination:=ActiveCell.Range("A1:S2"), Type:=xlFillDefault

Selection.Range("B2:H2").Select
Selection.ClearContents

  With Sheets("Fiche_d_evaluation_des_risques")
        Nl = .Range("B65536").End(xlUp).Row
          For Each x In Frame1.Controls ' Contôle ma valeur des boutons si true
              If x.Value = True Then
                .Range("H" & Nl).Value = x.Caption 'Taux de fréquence
              End If
          Next
          For Each x In Frame2.Controls
             If x.Value = True Then
               .Range("i" & Nl).Value = x.Caption 'Taux de gravité
              End If
          Next
    .Range("C" & Nl).Value = TextBox1.Value 'Situation dangeureuse
    .Range("E" & Nl).Value = TextBox2.Value ' Dommage éventuel
    .Range("L" & Nl).Value = TextBox3.Value ' Moyen éxistant
    .Range("M" & Nl).Value = TextBox4.Value ' Moyen à proposer
    .Range("N" & Nl).Value = TextBox5.Value ' Commentaires

    End With



 If CheckBox1.Value = False Then
 UserForm1.Hide
 UserForm2.Hide
 Else
 

 TextBox1 = ""
 TextBox2 = ""
 TextBox3 = ""
 TextBox4 = ""
 TextBox5 = ""
 OptionButton1 = False
 OptionButton2 = False
 OptionButton3 = False
 OptionButton4 = False
 OptionButton5 = False
 OptionButton6 = False
 OptionButton7 = False
 OptionButton8 = False
 
 End If

End Sub
Avec en supplément un contrôle que taux de fréquence et gravité soit bien selectionné.
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Bonsoir !!!

Voilà, merci pour ton dernier post, j'en ai pris compte.


Mon projet: ils rentrent le N°, excel va chercher les infos, ouvre usf 1 avec les infos, on les modifie, mais la: comment je peux m'y prendre pour qu'excel ne rajoute pas de ligne? un if?

J'ai utiliser:
Code:
Private Sub CommandButton3_Click()

Dim ValAChercher, ValTrouver

ValAChercher = TextBox1.Value

With Range("B19:B200")

ValTrouver = .Find(ValAChercher, LookIn:=xlValues).Row

UserForm1.TextBox1.Value = (C & ValTrouver).Value
UserForm1.Show
End With
End Sub

Le problème, c'est comment je peux récupéré la valeur de la cellule, et la mettre dans TextBox1 de UserForm1?
Code:
UserForm1.TextBox1.Value = (C & ValTrouver).Value

J'vais voir pour coder ça !!! j'poserais surement des questions mdr

Edit: J'ai modifier mon post pour pas faire de doublon.

Vincent
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Userform et selection manuel de cellules

Bonsoir Vincent,

Une piste différente sur ce fil qui te permet d'ouvrir l'usf en double_click sur la cellule qui t'interresse et les controls prennent les valeurs de la cellule active et des colonnes adjacente.
https://www.excel-downloads.com/threads/activation-userform-et-renseignement-de-celui-ci.110369/

Ensuite soit un IF effectivement avec ton bouton "Enregistrer les données" soit un nouveau bouton "Modifier les données".
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Bonjour,

Merci pour tes infos !! je suis entrain de voir pour mettre en place les deux choix: l'un le "modif" dans userform2, et l'autre le double clique,

Voilà mon code:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("C20:O" & Range("O65536").End(xlUp).Row)) Is Nothing Then

Cancel = True

UserForm1.TextBox1 = ActiveCell.Value

maLigne = ActiveCell.Row
tauxFrequence = Range("H" & maLigne).Value
tauxGravite = Range("I" & maLigne).Value + 4

UserForm1.TextBox1.Value = Range("C" & maLigne).Value
UserForm1.TextBox2.Value = Range("E" & maLigne).Value
UserForm1.TextBox3.Value = Range("L" & maLigne).Value
UserForm1.TextBox4.Value = Range("N" & maLigne).Value
UserForm1.TextBox5.Value = Range("O" & maLigne).Value



If tauxFrequence = 1 Then
UserForm1.OptionButton1 = True
End If
If tauxFrequence = 2 Then
UserForm1.OptionButton2 = True
End If
If tauxFrequence = 3 Then
UserForm1.OptionButton3 = True
End If
If tauxFrequence = 4 Then
UserForm1.OptionButton4 = True
End If
If tauxGravite = 5 Then
UserForm1.OptionButton5 = True
End If
If tauxGravite = 6 Then
UserForm1.OptionButton6 = True
End If
If tauxGravite = 7 Then
UserForm1.OptionButton7 = True
End If
If tauxGravite = 8 Then
UserForm1.OptionButton8 = True
End If



UserForm1.Show
End If
End Sub

J'aurai deux question: Pourquoi il ne veux pas me prendre la plage? Sur certaines cases, ça ouvre, sur d'autre non... j'aimerais bien que sur n'importe quelle case, ça ouvre la page de modification

Aussi,
Mes if, avec les taux de gravité, n'y a-t-il pas moyen de faire plus simple?



EDIT:
Ca fonctionne une fois sur deux... des fois ça selectionne la case, des fois, si j'suis un peu plus en dehors du texte de la case, ca ouvre etc..


Vincent
 
Dernière édition:

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Aussi, la formule est a l'envers:

Code:
maLigne = ActiveCell.Row

Range("C" & maLigne).Value = UserForm1.TextBox1.Value ' Ligne 1
UserForm1.TextBox2.Value = Range("C" & maLigne).Value ' Ligne 2

Quelque soit la ligne, ca me vide ma case C21 (par exemple), au lieu que TextBox1 prenne la valeur de C21 (par exemple)...

Bizarre :(:(

Cordialement,

Vincent

EDIT: Plus de problème, ca en deviens bizarre !!!
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : Userform et selection manuel de cellules

Bonsoir Vincent,
Pour commencer ton code fonctionne correstement chez moi!;)

Ensuite tu peux en effet simplifier ton code comme ceci:
Code:
Dim i As Integer 'en début de code
Dim j As Integer

[COLOR="green"]' ici If Not blabla....
' tes variables
' Puis après tes userform.textbox.value[/COLOR]

For i = 1 To 4
If tauxFrequence = i Then
UserForm1.Controls("OptionButton" & i) = True
End If
Next
    For j = 5 To 8
    If tauxGravite = j Then
    UserForm1.Controls("OptionButton" & j) = True
    End If
    Next

UserForm1.Show
End If
End Sub

Tel quel ton code rajoute une ligne avec "enregistrer les données"!
J'aurais personnellement superposer un bouton "modifier" par dessus le bouton "enregistrer" qui est visible avec double click (et masque "enregistrer") et inversement avec ton commandbutton1 de l'usf2.
comme ceci à la suite de la variable que je te propose ci dessus:
Code:
' [COLOR="Green"]j'ai mis [COLOR="Blue"]with userform1 [/COLOR]avant tes textbox blabla pour éviter de me répéter et après les For i et j[/COLOR]
.Enregistrer.Visible = False
.Enregistrer.Enabled = False
.Modifier.Visible = True
.Modifier.Enabled = True
.Show

End With
End If
End Sub

Puis dans le nouveau bouton "Modifier" ceci (emprunté sur le fil que je t'ai donné):
Code:
Private Sub Modifier_Click()
maligne = ActiveCell.Row

Range("C" & maligne).Value = TextBox1.Value
Range("E" & maligne).Value = TextBox2.Value
Range("L" & maligne).Value = TextBox3.Value
Range("N" & maligne).Value = TextBox4.Value
Range("O" & maligne).Value = TextBox5.Value
          For Each x In Frame1.Controls ' Contrôle ma valeur des boutons si true
              If x.Value = True Then
                Range("H" & maligne).Value = x.Caption 'Taux de fréquence
              End If
          Next
          For Each x In Frame2.Controls
             If x.Value = True Then
               Range("i" & maligne).Value = x.Caption 'Taux de gravité
              End If
          Next
          MsgBox "Données mises à jour"
Unload Me
End Sub

et enfin dans le commandbutton1 de l'usf2:
Code:
Private Sub CommandButton1_Click()
With UserForm1
.Show
.Enregistrer.Visible = True
.Enregistrer.Enabled = True
.Modifier.Visible = False
.Modifier.Enabled = False
End With

End Sub

Petit détail je mettrai plus tôt Unload Me dans ton bouton "Annuler", pour décharger l'usf, le Userform1.Hide ne fait que le masquer, donc il garde les dernières valeurs dans les textbox!, y compris en passant par ton double click;)

A toi de voir.


A+
 

bdx-77

XLDnaute Junior
Re : Userform et selection manuel de cellules

Bonsoir !!

Bonsoir Vincent,
Pour commencer ton code fonctionne correstement chez moi!;)

Ensuite tu peux en effet simplifier ton code comme ceci:
Code:
Dim i As Integer 'en début de code
Dim j As Integer

[COLOR="green"]' ici If Not blabla....
' tes variables
' Puis après tes userform.textbox.value[/COLOR]

For i = 1 To 4
If tauxFrequence = i Then
UserForm1.Controls("OptionButton" & i) = True
End If
Next
    For j = 5 To 8
    If tauxGravite = j Then
    UserForm1.Controls("OptionButton" & j) = True
    End If
    Next

UserForm1.Show
End If
End Sub
Pour ce qui est du code, j'sais pas, il me prends pas tout en place (je le test sur le 2007, il y a peut etre autre chose a mettre...) je vais poser la question sur le forum 2007.

Pour ce qui est de la boucle, j'avais essayer, mais bizarrement, je ne savais pas comment utiliser le numéro du bouton (j'ai déjà fait ce genre de chose, j'ai déjà fait HTML, PHP MySQL)

Tel quel ton code rajoute une ligne avec "enregistrer les données"!
J'aurais personnellement superposer un bouton "modifier" par dessus le bouton "enregistrer" qui est visible avec double click (et masque "enregistrer") et inversement avec ton commandbutton1 de l'usf2.
comme ceci à la suite de la variable que je te propose ci dessus:
Code:
' [COLOR="Green"]j'ai mis [COLOR="Blue"]with userform1 [/COLOR]avant tes textbox blabla pour éviter de me répéter et après les For i et j[/COLOR]
.Enregistrer.Visible = False
.Enregistrer.Enabled = False
.Modifier.Visible = True
.Modifier.Enabled = True
.Show

End With
End If
End Sub

T'inquiete pas pour ca, je n'ai pas envoyez la derniere version, mais j'ai mis en place quelques chose, j'attends de voir si j'ai des problemes, mais en gros, en ouvrant par double clic, ca coche une case cacher, si elle est cocher, sa fait le bouton remplacer et enleve enregistrer...

Puis dans le nouveau bouton "Modifier" ceci (emprunté sur le fil que je t'ai donné):
Code:
Private Sub Modifier_Click()
maligne = ActiveCell.Row

Range("C" & maligne).Value = TextBox1.Value
Range("E" & maligne).Value = TextBox2.Value
Range("L" & maligne).Value = TextBox3.Value
Range("N" & maligne).Value = TextBox4.Value
Range("O" & maligne).Value = TextBox5.Value
          For Each x In Frame1.Controls ' Contrôle ma valeur des boutons si true
              If x.Value = True Then
                Range("H" & maligne).Value = x.Caption 'Taux de fréquence
              End If
          Next
          For Each x In Frame2.Controls
             If x.Value = True Then
               Range("i" & maligne).Value = x.Caption 'Taux de gravité
              End If
          Next
          MsgBox "Données mises à jour"
Unload Me
End Sub

et enfin dans le commandbutton1 de l'usf2:
Code:
Private Sub CommandButton1_Click()
With UserForm1
.Show
.Enregistrer.Visible = True
.Enregistrer.Enabled = True
.Modifier.Visible = False
.Modifier.Enabled = False
End With

End Sub
Pour ca, j'était entrain de voir le code a mettre en place... je suis en pleine réflexion.

Petit détail je mettrai plus tôt Unload Me dans ton bouton "Annuler", pour décharger l'usf, le Userform1.Hide ne fait que le masquer, donc il garde les dernières valeurs dans les textbox!, y compris en passant par ton double click;)

A toi de voir.


A+
Pour ce dernier point, je ne savais pas !! très bonne idée, surtout que je réinitialisait a chaque fois avant de quitter la usf1...:D:D


Merci beaucoup pour ton aide !!! j'pense avoir le temps demain pour tester du code (ma copine est malade, pdt qu'elle dormira...)

Tchao !!
Vincent
 

Discussions similaires

Statistiques des forums

Discussions
312 499
Messages
2 089 000
Membres
104 002
dernier inscrit
SkrauzTTV