Excel / champ saisie

Bonjour à tous et ttes,

j’espère que vous allez bien. je suis nouveau sur ce forum que je découvre. je suis pas expert en excel ni en vba.

je me permets de faire appel a vous car j'ai un souci.

je cherche à mettre en place un système qui ne fasse en sorte que les données introduites en b2, c2, d2, c2 viennent après validation, se mettre au début du tableau de données qui commence à la ligne b4.

la colonne b est la date d'encodage,

la colonne c est l’article acheté,

la colonne c est le nom du fournisseur,

la colonne d est le montant de l'article.

pour faire simple, j'essaie de trouver un moyen qui m'évite de systématiquement devoir faire insertion nouvelle ligne en haut de mon tableau. je pensais donc faire un champ de saisie, qui fasse en sorte qu'une fois que j'ai encodé de nouvelles données en b2, c2, d2,e2, je fasse enter et qu'une fois enter fait ses données viennent se mettent au haut du tableau qui commence en b4.

je ne cherche pas à devoir nécessairement passé par la vba mais je pense ne pas avoir le choix.

si qq un ou qq une peut m'aider....merci à vous,

cdlmnt,

berni////

Salut,

Un essai,

Il y a du code VBA dans le module1 (pour la fonction) et dans workbooks (pour gerer la touche entrée)

Damien

bonjour bigadams,

merci d'avoir pris le temps de me répondre.

j'ai essayé d'introduire des donnes mais, j'arrive a écrire dans les cellules mais les données restent dans leurs cellules d'origine.

petit observation, j'ai placé sur la feuil2 les données de mon tableau (peut-être cela pourra-t-il servir).

merci de votre aide..;

bav,

berni///

Salut

Juste une remarque, tu as ecris dans A1->E1 alors qu'il fallait écrire dans les lignes A2->E2 et faire entrée lors de la fin de saisie sur E2.

CF ton message.

Je regarde ton tableau et j'adapte mon code pour ton exemple.

Damien


Avec le code modifié pour ton exemple.

Dis moi si cela te vas. Il faut faire ENTER sur la cellule "I2" pour ajouter la ligne

++

Damien

re-bjr damien,

un tt grand merci pour votre fichier qui est vraiment ce que je cherchais à faire..merci à vous..

tout ma difficulté va être de de transposer votre travail sur le fichier original...

avez-vous un conseil afin de ne pas trop ma planter..?

si besoin, accepteriez-vous de regarder sur mon fichier si tt est ok..?

merci à vous..

bonne après-midi..

berni///

Re,

Il y a deux macros a ajouter pour que cela fonctionne :

1ere Macro a mettre dans Workbooks, cette macro va permettre l'execution d'une autre macro lors de l'appuie sur une touche (enter pour notre exemple).

Donc Excel -> ALT F11 (ouvre Editeur VBA)

Fenêtre Haut gauche , cliquer sur VBAProject(..) -> Microsoft Excel Objects puis sur ThisWorkbook

Dans la partie haut droite coller le code suivant :

Private Sub Workbook_Open()
    Application.OnKey "{Enter}", "AjouteCopieligne" 'Touche enter pavé numerique
    Application.OnKey "~", "AjouteCopieligne" 'Touche Entrée
End Sub

Qu'importe l'onglet actif, dès que l'on clique sur entrée ou Enter (pavé numerique) cela va lancer la macro AjouteCopieligne

2eme Macro

Il faut la créer dans un module

Donc Excel -> ALT F11 (ouvre Editeur VBA)

Fenêtre Haut gauche , cliquer DROIT sur VBAProject(..) ->Insertion -> Module

Dans la partie haut droite coller le code suivant :

Sub AjouteCopieligne()
Dim c As Range

If Selection.Count <> 1 Then Exit Sub 'si on a selectionner plusieurs cellule alors on sors
If ActiveSheet.Name <> "Feuil2" Then Exit Sub 'Si on est pas sur la bonne feuille alors on ne fait pas le copier/coller

If Selection = Range("I2") Then  'Si on appuie sur enter et que l'on est dans la cellule E2 alors

    Rows("4:4").Insert Shift:=xlDown 'on insere une nouvelle ligne sur la ligne 4
    Range("b2", "I2").Copy  'On copy la ligne B2 -> E2
    Range("B4").PasteSpecial xlPasteValues 'On colle les valeurs
    Range("b2", "I2").Clear 'On supprime les valeurs

    'Code permettant de mettre le contour autour des cellules
    For Each c In Range("B2", "I2") 'Contour mis autour des cellules B2 -> I2
    c.Borders(xlDiagonalDown).LineStyle = xlNone
        c.Borders(xlDiagonalUp).LineStyle = xlNone
        With c.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
    With c.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With c.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With c.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    Next

    'Code pour colorier en rose la nouvelle ligne collé
    For Each c In Range("B4", "I4") 'Ligne B4 -> I4
    With c.Interior
        .ColorIndex = 38 '38 = rose
        .Pattern = xlSolid
    End With
    Next
End If
End Sub

IMPORTANT :

Il faut sans doute modifier les lignes :

If ActiveSheet.Name <> "Feuil2" Then Exit Sub 'Si on est pas sur la bonne feuille (ici la bonne c'est Feuil2) alors on ne fait pas le copier/coller
If Selection = Range("I2") Then  'Si on appuie sur enter et que l'on est dans la cellule I2 alors

Sauvegarde ensuite le fichier et ouvre le a nouveau.

Cela devrait fonctionner sans problème.

Damien

Bonjour damien, bonjour à tous...

comme indiqué dans mon précédement post..j'ai essaté de transferer sur le fichier original la vba proposé par damien.

je commencerais par le remercier car d'une part ça marche et d'autre part, je suis grâce à ses bons conseils parvenu à transposer la vba.

je pense qu'une des régles de ce type de forum est le partage donc, je post le fichier

deux observations/demandes :

1) le code couleur de la ligne à inscrusté n'est pas la même que la couleur utilisé pour les lignes du dessous. est-il de rectifier le tire (j'ai regardé sur la palette couleur...le 38 renvoi au rose saumon mais il me semble que dans mon cas on est plus sur du rose),

2) j'ai cherché à protéger ma feuille d'encodage sauf la ligne 2 afin d'éviter les erreurs de manip..

j'observe que si je protège ma feuille...la macro bugg...j'imagine que les chose sont liés...pouvez-vous confirmer l'info...est-il possible de contourner le pb..? [en ne protégeant pas la ligne 4 par ex..?]

3) j'aimerais aujouter à la macro l'info d'ajouter à la ligner inscruster des bordures blanches...pour se faire, je peux ajouter à la macro ceci :

Sub couleurs()

'Epaisseur de la bordure

ActiveCell.Borders.Weight = 1

'Couleur de la bordure : rouge

ActiveCell.Borders.Color = RGB(255, 255, 255)

End Sub

je decouvre ce site...et je suis surpris par son efficacité et la qualité de ses interventions..

merci aux modérateurs et concepteur de ce site...

tres cdlmnt,

berni///

Salut,

De retour de vacances..... Ca fait du bien !!

Pour répondre a tes questions :

1 - Change le code couleur a ta convenance. Il y a sur le forum du code permettant de récuperer le code couleur d'une cellule.

2- Un peu plus compliqué :

  • Selectionner la plage de saisie (B2=>G2)
  • Aller dans le Menu Outils-> protection -> permettre aux utilisateurs de modifier de plages.
  • On doit avoir Plage1 |$B$2:$g$2 (Pas de mot de passe) - Cliquer sur appliquer
  • Dans le code on aura les moficiations suivantes a faire :

La définition du mot de passe :

Dim monpassword As String
monpassword = "123" 

La deprotection de la feuille

ActiveSheet.Unprotect (monpassword) 'On deprotège la feuille puis on fait la manipulation

La reprotection de la feuille

ActiveSheet.Protect password:=monpassword, DrawingObjects:=False, Contents:=True, Scenarios:=False 'On reprotege la feuille

Ce qui fait a la fin :

Sub AjouteCopieligne()
Dim c As Range
Dim monpassword As String
monpassword = "123" 'MODIF PROTECTION

If Selection.Count <> 1 Then Exit Sub 'si on a selectionner plusieurs cellule alors on sors
If ActiveSheet.Name <> "encodage_données" Then Exit Sub 'Si on est pas sur la bonne feuille alors on ne fait pas le copier/coller

If Selection = Range("g2") Then  'Si on appuie sur enter et que l'on est dans la cellule E2 alors
ActiveSheet.Unprotect (monpassword) 'On deprotège la feuille puis on fait la manipulation

    Rows("4:4").Insert Shift:=xlDown 'on insere une nouvelle ligne sur la ligne 4
    Range("b2", "g2").Copy  'On copy la ligne B2 -> E2
    Range("B4").PasteSpecial xlPasteValues 'On colle les valeurs
    Range("b2", "g2").Clear 'On supprime les valeurs

    'Code permettant de mettre le contour autour des cellules
    For Each c In Range("B2", "g2") 'Contour mis autour des cellules B2 -> g2
    c.Borders(xlDiagonalDown).LineStyle = xlNone
        c.Borders(xlDiagonalUp).LineStyle = xlNone
        With c.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
    With c.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
        End With
    With c.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With c.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    Next

    'Code pour colorier en rose la nouvelle ligne collé
    For Each c In Range("B4", "g4") 'Ligne B4 -> I4
    With c.Interior
        .ColorIndex = 38 '38 = rose
        .Pattern = xlSolid
    End With
    Next

ActiveSheet.Protect password:=monpassword, DrawingObjects:=False, Contents:=True, Scenarios:=False 'On reprotege la feuille
End If

End Sub

3 - Il faut juste modifier la partie du code suivant :

    'Code pour colorier en rose la nouvelle ligne collé
    For Each c In Range("B4", "g4") 'Ligne B4 -> I4
    With c.Interior
        .ColorIndex = 38 '38 = rose
        .Pattern = xlSolid
        c.Borders.Weight = 1
    'Couleur de la bordure : rouge
    c.Borders.Color = RGB(255, 255, 255)
    End With
    Next

Cloture la demande svp si tu as ta réponse.

Damien

Rechercher des sujets similaires à "champ saisie"