Microsoft 365 Vba formulaire en bogage avec les ongles masqués

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Laeti023

XLDnaute Nouveau
Bonjour tout le monde,

Je travaille actuellement sur un fichier de gestion de stock sur Excel, mon premier onglet est un formulaire de saisie d'entrées et sorties du matériel qui avec une macro copie les données sur un deuxième onglet et se reinitialise pour les prochaines saisies.

Dans un soucis de confidentialité, il n'y a que l'onglet formulaire qui doit être visible.

J'ai utilisé un module pour cacher les autres onglets en veryhidden, sauf que ma macro d'enregistrement de lignes entrées et sorties de stock ne fonctionne pas quand les onglets sont cachés.

Quand je clique sur enregistrement j'ai une erreur et la proposition de debogage.

Avez-vous une idée de comment dire à Excel de transférer les données dans l'onglet caché sans qu'il bloque ?

Nb:je ne peux pas envoyer ce fichier mais si besoin j'en ferai un exemple ce week end.

D'avance merci si vous avez des idées parce que je sèche 😅..

Bonne journée !
 
Solution
Alors essaye ceci :
VB:
Sub Import_Saisie()
' Import_Saisie Macro
Dim DerLig As Long

    With Sheets("Saisie")
        DerLig = .Cells(.Rows.Count, 2).End(xlUp).Row
        .Range("B5:J" & DerLig).Copy
    End With

    With Sheets("EntréesSorties")
        DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Cells(DerLig + 1, 1).PasteSpecial Paste:=xlPasteValues
    End With

    Application.CutCopyMode = False

End Sub

Il faudrait peaufiner le code, au cas où la 1re cellule de la dernière ligne saisie soit vide.
J'ai modifié la macro dans le message #10. Essaye-la.

J'ai modifié comme ceci :
VB:
DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
Yesss c'est bon, ça copie à la suite ! MERCIII BEAUCOUP !!! 😀

Je peux te poser deux questions encore ? :

1. Je n'ai pas de limite de création de lignes ? Sur la macro de base j'avais du voir la dernière ligne disponible sur le tableur et dans ton module ce n'est pas noté je ne sais pas quelle notion remplace le numéro de la dernière ligne (ça c'est plus pour ma culture vba ^^)

2. Le tableau de saisie que je copie contient 10 lignes, ils peuvent en remplir moins et donc ça me copie les lignes vides aussi, j'ai essayé de trouver une solution pour 'purger' la base de données entrées/sorties mais ce n'est pas fructueux, est-ce que tu aurais une idée soit pour intégrer au module de "saisie" de copier uniquement les lignes non vides ou pour purger facilement la base de données des entrées et sorties ?

Merci d'avance
 
1. Je n'ai pas de limite de création de lignes ? Sur la macro de base j'avais du voir la dernière ligne disponible sur le tableur et dans ton module ce n'est pas noté je ne sais pas quelle notion remplace le numéro de la dernière ligne (ça c'est plus pour ma culture vba ^^)
C'est "Rows.Count" qui remplace le numéro de la dernière ligne de la feuille.



2. Le tableau de saisie que je copie contient 10 lignes, ils peuvent en remplir moins et donc ça me copie les lignes vides aussi, j'ai essayé de trouver une solution pour 'purger' la base de données entrées/sorties mais ce n'est pas fructueux, est-ce que tu aurais une idée soit pour intégrer au module de "saisie" de copier uniquement les lignes non vides ou pour purger facilement la base de données des entrées et sorties ?
C'est cette instruction qu'il faut modifier : Sheets("Saisie").Range("B5:J14").Copy

Y a-t-il des cellules no vides en dessous de B14 ???
 
Dernière édition:
C'est "Rows.Count" qui remplace le numéro de la dernière ligne de la feuille.



J'imagine que tu utilises un Tableau Structuré pour la saisie des entrées. Me trompé-je ?
Ah ok merci 🙂 ! (Je me rends compte que je me suis compliqué un peu la vie ^^")

Alors j'ai lu pas mal de messages sur le forum su ces tableaux structurés et je n'ai pas la définition exactes de ça :
Mon tableau à les colonnes suivantes :
- Date
- Employé

- Rayon
- Désignation
- Conditionnement
- Prix unitaires (colonne masquée)
- Nombre entrées
- Nombre sorties
- Références


Les colonne en gras sont les colonnes modifiables, le reste c'est de l'import de données d'un autre onglet
Cas particulier pour la colonne "Désignation" c'est une formule qui permet la recherche dans un autre onglet 'base article' (liste avec validation de données en place)

Je ne sais pas si je suis clair, en gros c'est vraiment un tableau simplifié pour saisie rapide et limitant les erreurs.
 
Alors essaye ceci :
VB:
Sub Import_Saisie()
' Import_Saisie Macro
Dim DerLig As Long

    With Sheets("Saisie")
        DerLig = .Cells(.Rows.Count, 2).End(xlUp).Row
        .Range("B5:J" & DerLig).Copy
    End With

    With Sheets("EntréesSorties")
        DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Cells(DerLig + 1, 1).PasteSpecial Paste:=xlPasteValues
    End With

    Application.CutCopyMode = False

End Sub

Il faudrait peaufiner le code, au cas où la 1re cellule de la dernière ligne saisie soit vide.
 
Alors essaye ceci :
VB:
Sub Import_Saisie()
' Import_Saisie Macro
Dim DerLig As Long

    With Sheets("Saisie")
        DerLig = .Cells(.Rows.Count, 2).End(xlUp).Row
        .Range("B5:J" & DerLig).Copy
    End With

    With Sheets("EntréesSorties")
        DerLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Cells(DerLig + 1, 1).PasteSpecial Paste:=xlPasteValues
    End With

    Application.CutCopyMode = False

End Sub
Ca marche ça c'est super !!!!!!!!!!!!! Merci beaucoup !!!!!!!! 😀 😀
Tu m'expliques ?
 
Tu m'expliques ?
Non...

Je n'ai pas besoin de t'expliquer car c'est le même principe que précédemment : on détermine le numéro de la dernière ligne (variable de type Long que j'ai appelée DerLig) en partant de la dernière ligne de la colonne numéro 2 (donc colonne B) et on remonte jusqu'à rencontrer une cellule non vide.
Ensuite on copie la plage de cellules qui commence en B5 et se termine en conne J sur la ligne dont on vient de calculer le numéro.
 
Non...

Je n'ai pas besoin de t'expliquer car c'est le même principe que précédemment : on détermine le numéro de la dernière ligne (variable de type Long que j'ai appelée DerLig) en partant de la dernière ligne de la colonne numéro 2 (donc colonne B) et on remonte jusqu'à rencontrer une cellule non vide.
Ensuite on copie la plage de cellules qui commence en B5 et se termine en conne J sur la ligne dont on vient de calculer le numéro.
Du coup avec tes quelques explications, j'ai modifié un peu mon formulaire et j'ai pu réadapter le module donc je suis trop contente !!!!!

Les tests sont concluants, je croise juste les doigts que mon fichier ne plante pas ^^" !!

Merci beaucoup beaucoup beaucoup !!!!! 😀
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
985
Retour