Encore un ajout de ligne...

  • Initiateur de la discussion clem
  • Date de début
C

clem

Guest
Bonjour à tous,

Je me permets de reposter mon message cette fois-ci avec exemple afin que vous puissiez mieux comprendre mon souci...

J'ai un menu principal dans lequel je peux cocher une case ou la décocher. Lorsque la case se coche, je voudrai récupérer un identifiant qui se trouve dans une colonne à côté de cette case. Le but étant d'ajouter une ligne dans un deuxième tableau lorsque la case se coche en récupérant ce code dans la première colonne.

(En fait dans l'exemple ce que je n'arrive pas à faire c'est récupérer l'identifiant qui se trouve dans la colonne type (ex R, JZ) pour l'affecter dans mon deuxième tableau. )

Merci par avance pour votre aide
@+
[file name=fichierExemple.zip size=9836]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/fichierExemple.zip[/file]
 

Pièces jointes

  • fichierExemple.zip
    9.6 KB · Affichages: 13
  • fichierExemple.zip
    9.6 KB · Affichages: 9
  • fichierExemple.zip
    9.6 KB · Affichages: 12

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour clem, bonjour à toutes et à tous :)

Je te renvoie ton fichier avec un exemple de code. J'ai supprimé 5 cases à cocher inutiles : il y en avait 2 par cellule dans la plage B6:B10.

En créant tes cases, il faudra faire attention à bien les faire débuter (en haut à gauche) dans la cellule souhaitée, car c'est cette information (TopLeftCell) qui permettra de trouver le type correspondant dans la cellule de droite.

Le code proposé (à adapter, naturellement ):

Option Explicit

Sub CasesACocher_Click()
'
Dim Msg$
'
  Msg = 'Nom de l'objet : ' & Application.Caller & vbCrLf & vbCrLf
  With ActiveSheet.Shapes(Application.Caller)
    Msg = Msg & 'Modification d'état de ' & IIf(.ControlFormat.Value _
          = 1, 'non cochée à cochée', 'cochée à non cochée') & vbCrLf & _
          'Type correspondant : ' & .TopLeftCell.Offset(0, 1) & vbCrLf
  End With

  MsgBox Msg

End Sub

Tu connectes toutes tes cases à cocher à cette procédure. J'ai formaté en gras les informations importantes.

Voili voilà

EDITION : Le fichier... :whistle:

[file name=clem_checkboxes.zip size=14147]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/clem_checkboxes.zip[/file]

A+ ;)

Message édité par: Charly2, à: 28/03/2006 15:14
 

Pièces jointes

  • clem_checkboxes.zip
    13.8 KB · Affichages: 16
C

clem

Guest
Merci beaucoup pour ta réponse Charly,

Malheureusement, mon pb n'est pas totalement résolu car suite à cette action de cases à cocher je voudrai ajouter une ligne dans mon deuxième tableau en récupérant cette identifiant.
Pourrais-tu me donner ce code supplémentaire ?

Encore une fois merci, j'espère que tu pourras me fournir ce complément.

Ps: je débute et je comprends pas grand chose au code...

@+
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour clem, bonjour à toutes et à tous :)

J'espère que cette mouture te conviendra, la procédure réagit si une des cases devient cochée (donc pas de réaction en 'décochant' une case).

Option Explicit

' Constantes des adresses des cases à cocher en fonction de la
' catégorie

Const AdrRefCD$ = '$B$6:$B$10'
Const AdrRefLivres$ = '$B$12'
Const AdrRefDVD$ = '$B$14'

Sub CasesACocher_Click()
'
Dim strType As String
Dim strNomTab As String
Dim Cell As Range
'
  ' La procédure ne réalise une opération que lorsque l'on
  ' coche la case (aucune action lorsqu'elle passe de cochée
  ' à 'décochée')

  With ActiveSheet.Shapes(Application.Caller)
    '
    ' on effectue les opérations uniquement si la case vient
    ' d'être cochée

    If .ControlFormat.Value = 1 Then
      '
      ' on récupère la cellule de la case à cocher
      ' et le Type dans la catégorie

      Set Cell = .TopLeftCell
      strType = Cell.Offset(0, 1)
      '
      ' et on vérifie à quelle catégorie elle fait référence
      ' (modifier les constantes si évolution), et on attribue
      ' à strNomTab la plage nommée correspondante dans le
      ' classeur (voir menu Insertion/Nom/Définir)

      If Not Intersect(Cell, Range(AdrRefCD)) Is Nothing Then
        strNomTab = 'TabCD'
      ElseIf Not Intersect(Cell, Range(AdrRefLivres)) Is Nothing Then
        strNomTab = 'TabLivres'
      ElseIf Not Intersect(Cell, Range(AdrRefDVD)) Is Nothing Then
        strNomTab = 'TabDVD'
      Else
        ' Au cas où des nouvelles cases à cocher seraient reliées
        ' à cette procédure (sur Click), on informe qu'il faut
        ' mettre à jour les constantes (début de ce module)
        ' et on sort de la procédure

        MsgBox UCase('* * * Catégorie non trouvée * * *') & _
               vbCrLf & vbCrLf & 'merci de mettre à jour les' & _
               vbCrLf & 'contantes de catégorie' & vbCrLf & _
               'dans le projet VBA !', vbCritical + vbOKOnly
        Exit Sub
      End If

      Set Cell = Evaluate(strNomTab)
      With Cell.Item(3, 1).Resize(1, Cell.Columns.Count)
        ' on insère une ligne en début de tableau concerné,
        ' on efface les données précédentes et on place en début
        ' de cette nouvelle ligne du tableau le type

        .Copy
        .Insert shift:=xlDown
        .Offset(-1, 0).ClearContents
        .Offset(-1, 0).Item(1) = strType
      End With
    End If
  End With
End Sub

En espérant répondre à ta demande.

[file name=clem_checkboxesV2.zip size=18138]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/clem_checkboxesV2.zip[/file]

A+ ;)
 

Pièces jointes

  • clem_checkboxesV2.zip
    17.7 KB · Affichages: 9
C

clem

Guest
Je ne sais comment te remercier...

Cela dit j'ai essayer de l'adapter à mon fichier sur lequel je bosse et il me décale tout...Je sais je suis trop nul...alors je ne sais plus comment faire car j'ai tout repris à la lettre et pas à pas, il y a juste les fonctions sub cd () et case à cocher 13 ou j'ai pas compris à quoi cela servait.

Voilà tu en as déjà tellement fait pour moi...

Encore merci

@+
 
C

clem

Guest
C'est bon tout fonctionne !!! mis à part que j'ai mis un bouton ajouter ligne en face de chaque tableau pour ajouter des lignes.

Il me reste juste à voir comment associer un bouton à un tableau...

Merci !
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjourr clem, bonjour à toutes et à tous :)

Si tu as des soucis d'adaptation, n'hésite pas :)

Par contre, pour les 2 procédures que tu cites dans ton avant-dernier post, ce sont celles que tu avais créées et que je n'ai pas voulu supprimer. Ceci dit, elle ne servent plus :whistle:

A+ ;)
 
C

clem

Guest
re-Salut,

j'ai réussi à adapter et ça marche impécablement grâce à toi...

Encore deux questions cependant...:
Je veux associer un bouton 'ajouter ligne' à chaque tableau. Mon problème est que lorsque je clique sur les cases à cocher pour ajouter des lignes, les boutons restent figé à leur place et ne se décalent pas avec mes tableaux.(cf fichier)
De plus je n'arrive pas avec la définition de ces boutons à rajouter une ligne....
J'ai aussi ajouter des listes déroulante dans mes tableaux: ça fonctionne bien sur ton exemple, mais moi je ne récupère pas la liste déroulante dans mon fichier

Que dois-je rajouter ?

Merci encore...;-) @+ [file name=clem_checkboxesV3.zip size=15673]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/clem_checkboxesV3.zip[/file]
 

Pièces jointes

  • clem_checkboxesV3.zip
    15.3 KB · Affichages: 11

Charly2

Nous a quittés en 2006
Repose en paix
re clem,

Je te joins le fichier modifié pour tenir compte de tes remarques (boutons fixes) et de ta demande.

[file name=clem_checkboxesV3_1.zip size=16718]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/clem_checkboxesV3_1.zip[/file]

Je pense que tu as remarqué qu'en cochant une CheckBox, une ligne était automatiquement ajoutée dans chaque tableau. Il faut donc veiller à ce que tes boutons ne fassent pas double-emploi.

A+ ;)
 

Pièces jointes

  • clem_checkboxesV3_1.zip
    16.3 KB · Affichages: 12
C

clem

Guest
Merci, encore une fois quelle rapidité !!!

en fait je me suis sûrement mal exprimé.
Le bouton qui ajoute une ligne est destiné à l'ajout d'une ligne type donc une ligne qui reprend l'identifiant inséré par le checkbox.

Ex: -on clique sur le check box 'R'
ajout d'une ligne avec identifiant R
-on clique sur le bouton 'add a line'
ajout d'une ligne avec identifiant 'R'
-on clique encore une fois sur le bouton 'add a line'
ajout d'une ligne avec identifiant 'R'
-puis si l'on clique sur le check box 'JZ'
ajout d'une ligne avec identifiant 'JZ'

Je ne me s'en pas capable encore une fois d'apater ta version...merci si tu peux encore une fois m'aider..
 

Charly2

Nous a quittés en 2006
Repose en paix
re,

Voilà la version corrigée : elle ajoute une ligne en début de tableau avec le même type que celui trouvé avant l'insertion...

[file name=clem_checkboxesV3_1_20060330192501.zip size=18446]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/clem_checkboxesV3_1_20060330192501.zip[/file]

A+ ;)
 

Pièces jointes

  • clem_checkboxesV3_1_20060330192501.zip
    18 KB · Affichages: 11
C

clem

Guest
Salut Charly,

c'est exactement ce que je voulais. Merci !!!!

Pourrais-tu encore me dire à quoi sert la fonction Sub bn ()

ainsi que les fonctions

With ActiveSheet.Shapes(NomBouton).TopLeftCell.Offset(2, 0)

With Cell.Item(3, 1)

est-ce que c'est ça qui sert à figé les boutons ??

merci, ++
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour clem, bonjour à toutes et à tous :)

Heureux que cela te convienne :)

[ul][li]-> Pour la procédure bn(), tu peux la supprimer. C'est celle qui m'a permis de tester le positionnement des boutons. J'ai simplement oublié de l'effacer.[/li]

[li]-> Quant à With ActiveSheet.Shapes(NomBouton).TopLeftCell.Offset(2, 0), ce n'est pas une fonction, mais une instruction qui permet d'accélérer le code en lui indiquant à quelle données on va faire allusion dans les instructions suivantes (valable jusqu'à End With).

Les boutons sont chacun situé sur la cellule de gauche au niveau de la 1ère ligne de titres de chaque tableau. Cette instruction permet d'indiquer au compilateur que les instructions qui suivent auront pour base la cellule qui se trouve 2 lignes plus bas que celle du bouton.
Tous les appels de méthodes ou de propriétés précédés d'un . (point) en tiendront compte.[/li]

[li]-> De la même façon, une fois Cell initialisée, elle contient la plage de cellules du tableau auquel le bouton est attaché. Le suffixe .Item(3, 1) indique que l'on va travailler avec la 3ème ligne du tableau en colonne 1.[/li][/ul]

Ce qui sert à figer les boutons, c'est d'une part leur propriété 'Déplacer sans dimensionner avec les cellules, et d'autre part que lors d'une insertion de ligne dans le tableau, ce sont les cellules de la colonne C à la colonne F qui sont décalées, ce qui permet au bouton situé dans le ou les tableaux qui sont plus bas de conserver le bouton sur leur première ligne.

Voili voilà

A+ ;)
 
C

clem

Guest
re,

C'est encore moi.
Tout est Ok, mis à part que les boutons se décalent. J'ai essayé de regardé la dernière version que tu m'avais corrigé. Et j'ai fais exactement pareil que toi, cependant sur ton exemple tes boutons se décalent aussi.

A quoi cela est-il du ?

Merci...

Ps: J'aurai encore une ou deux questions après ça....dsl...encore sur les tableaux (ras ras le bol des tableaux et boutons moi !!!)
 

Discussions similaires

Réponses
6
Affichages
434

Statistiques des forums

Discussions
312 492
Messages
2 088 910
Membres
103 983
dernier inscrit
AlbertCouillard