Feuille avec lignes annulées
Bonjour à tous !
J'ai une base d'usagers ;
Il arrive que certains usagers soient à annuler.
Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées".
Merci par avance pour vos réponses.
Danie.
Salut,
Danie a écrit :Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées
Je crois qu'il existe en tout 743 manières de réaliser ce que tu désires, il faudrait juste avoir un peu plus de précisions sur ton fichier, voire nous le fournir
Voici un exemple dans le fichier ci-joint :
Option Explicit
Sub aa()
Dim i As Long
i = InputBox("Quelle ligne désires-tu transférer sur la feuille ''Archives'' ?")
If i < 2 Then
MsgBox ("Seules les lignes dès la ligne 2 peuvent être supprimées")
Exit Sub
End If
Range("A" & i & ":C" & i).Copy Destination:=Sheets("Archives").Range("A" & Sheets("Archives").Range("A" & Rows.Count).End(xlUp).Row + 1)
Rows(i).Delete Shift:=xlUp
Range("G1").Select
End SubCordialement.
Bonjour Yvouille et merci pour ta réponse !
Hélas, je suis novice en la matière et la réponse que tu me donnes relève pour moi de l'incompréhension totale". Je suis confuse de montrer autant d'ignorance. Et je vais de ce pas essayer d'approcher les fonctionnements des macros.
Je te joins mon fichier :
En fait je voudrai créer une feuille NPAI qui récupère automatiquement les enregistrements que j'annule manuellement dans ma base.
Si possible en pouvant incrémenter sur cette nouvelle feuille la "date de décision d'annulation par l'équipe " de l'usager.
Je vais étudier VBA en attendant ta réponse.
Cordialement,
Danie.
Re-bonjour,
Tu dis vouloir effacer manuellement les données, mais tu effaces quand même à chaque fois une ligne entière (comme indiqué dans ta première demande) ou bien ? La solution de passer par un InputBox comme dans mon exemple ne te convient vraiment pas ?
Je n'ai pas trouvé dans ton fichier de colonne "date de décision d'annulation par l'équipe ". Ou se trouve donc cette date ? S'agit-il de la colonne U ? De la date du jour du transfert ?
A te relire.
Yvouille a écrit :Re-bonjour,
Tu dis vouloir effacer manuellement les données, mais tu effaces quand même à chaque fois une ligne entière (comme indiqué dans ta première demande) ou bien ? La solution de passer par un InputBox comme dans mon exemple ne te convient vraiment pas ?
Je n'ai pas trouvé dans ton fichier de colonne "date de décision d'annulation par l'équipe ". Ou se trouve donc cette date ? S'agit-il de la colonne U ? De la date du jour du transfert ?
A te relire.
Bonsoir Yvouille !
AU SECOURS !!!, suite à ton envoi de fichier avec macro, j'ai voulu comprendre la VBA (quelle prétention !). Ainsi j'ai passé plusieurs heures à essayer de faire une boîte de dialogue pour cette histoire d'annulation !
J'ai la tête comme une citrouille ! Il faut dire que je suis dans le genre testarde à essayer et tester pour comprendre et mémoriser.
Mais là, je suis lasse.
Je t'envoie mon nouveau fichier et la macro que j'ai tenté d'écrire (mais qui ne marche absolument pas) en m'aidant de la tienne. J'ai le cerveau qui fume, les yeux cernés et les idées dans les chaussettes (imagine la distance cerveau / chaussettes : autant manger un Paris/Brest).
Si tu peux m'aider, tu sauves mon dimanche !
Non pas que je sois réellement obligée de me dépatouiller pour lundi, je dirai même que toute cette histoire est de ma propre initiative, mais j'ai bien peur de ne pas résister demain à tenter de trouver la solution.
Je te remercie par avance.
Danie.
Voici la macro (pleine de commentaires ) :
Sub annulation_usager_archivage()
demande_annulation:
On Error GoTo Erreur:
' annulation_usager_archivage Macro
' Macro enregistrée le 26/04/2013 par Danie
'
' Touche de raccourci du clavier: Ctrl+a
'
' sheets([nom de la feuille])
' rows(i) signifie ligne([n°de ligne])
' dim : déclaration de la variable ; la syntaxe est : dim [chaîne de caractères sans espace représentant la variable]
' As : attend le type de la variable ;
' Long : type de variable Numérique : entier de - 2'147'483'648 à 2'147'483'647 : symbole : & (le nombre de lignes possibles est 65536
' deux syntaxes possibles : 1) dim no_ligne as long 2) dim no_ligne &
Dim no_ligne As Long
'afficher le message entre guillemets et recuperer le n° rentré dans no_ligne
no_ligne = InputBox("n° de ligne à transférer dans la feuille 'NPAI'")
' empecher la suppression des lignes de titre et oblige un n° de ligne positif
If no_ligne < 2 Then
MsgBox ("impossible")
'Suppression du contenu de la cellule no_ligne et sortir de la macro
Exit Sub
End If
' demande de confirmation de la suppression
Select Case MsgBox("voulez vous annuler cet usager (O/N) : " & Cells(no_ligne, "a") & " " & Cells(no_ligne, B) & " ?", vbYesNo, "Demande de confirmation")
Case vbYes
Dim date_annulation As Date
date_annulation = InputBox("date d'annulation : ")
Dim raison_annulation As String
raison_annulation = InputBox("raison de l'annulation : ")
' selection des cellules de la ligne correspondante au n° de ligne
' et copie des cellules de la ligne selectionnée dans la feuille NPAI à la suite des lignes déjà écrites
'mettre en mémoire les cellules de la ligne en demande d'annulation
'copier ces cellules sur la feuille npai à la première ligne vide
Dim nb_ligne_npai As Integer
nb_lignes_npai = Sheets("npai").WorksheetFunction.CountA(Range("A:A")) 'Fonction NBVAL
Range("A" & no_ligne & ":E" & no_ligne & date_annulation & no_ligne & raison_annulation & no_ligne).Copy Destination:=Sheets("NPAI").Range("A" & Sheets("NPAI").Range("A" & Rows.Count).End(xlUp).Row + 1)
' supression de la ligne sélectionnée dans la feuille USAGERS
Rows(no_ligne).Delete Shift:=xlUp
Case vbNo
GoTo demande_annulation:
End Select
Exit Sub
' test de saisie de la touche annulation ou de la croix rouge car renvoie un message d'erreur 13
Erreur:
If Err.Number = 13 Then
Exit Sub
End If
End Sub
Re-bonjour,
Ta question initiale était :
Là, j'avoue ne plus trop savoir où tu en esDanie a écrit :Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées".
Yvouille a écrit :Re-bonjour,
Ta question initiale était :
Là, j'avoue ne plus trop savoir où tu en esDanie a écrit :Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées".
Tu as raison, je ne sais plus non plus où j'en suis. Disons qu'en résumé, j'ai adoré ta solution d'annulation de lignes par macro, et qu'elle m'a appris que la VBA permettait tout un tas de possibilités. D'où l'envie d'aller plus loin dans la VBA, jusqu'à me perdre.
En fait, je voudrais à partir de ma feuille "usager", pouvoir comme tu me l'a montré dans ta macro, annuler une ligne et la sauvegarder dans la feuille NPAI, à partir d'un bouton.
Puis, j'ai vu que l'on pouvait faire une boîte de dialogue.
Donc j'ai voulu que cette demande d'annulation renvoie un message de demande de confirmation en ramenant le nom et le prénom de la ligne à annuler.
Ensuite, je me suis dit que je pourrai toujours par une boîte de dialogue et suite à la confirmation de l'annulation, demander la raison de l'annulation ainsi que la date (qui peut être antérieure à la date du jour), et tout en transférant certaines zones de la feuille "usager" à la feuille "npai" renseigner les zones "date d'annulation" et "raisons" de la feuille NPAI.
Je ne sais même pas si je suis claire.
Dans tous les cas, merci pour ta réponse si rapide.
Très bonne soirée.
Danie.
Salut,
Il est inutile de reprendre à chaque fois l’entièreté du message précédent, puisqu’il est à disposition juste au dessus. Utilise l’option
« Citer » uniquement si tu veux mettre en évidence une partie précise d’un ancien message.
Ton fichier est un doux mélange d’un peu n’importe quoi (par exemple tu as un bouton normal de « Contrôle de formulaire » et d’autres boutons « ContrôleActiveX »). Je présume donc que c’est un fichier pour des tests. Comme ceux-ci peuvent-être sans fin, je te prierais d’ouvrir une nouvelle discussion s’il s’agit d’une nouvelle question.
Je réponds déjà ici à ta demande concernant le message de confirmation. J’ai modifié ta macro (recopiée d’après la mienne) à cet effet.
Private Sub CommandButton1_Click()
Dim i As Long
Dim Réponse, Texte, Style
i = InputBox("LA LIGNE dont vous saisirez le n° sera transférée dans la feuille ''NPAI'")
If i < 2 Then
MsgBox ("impossible")
Exit Sub
End If
Texte = "Désirez-vous vraiment supprimer l'inscription de " & vbNewLine & vbNewLine & Cells(i, 2) & " " & Cells(i, 1) & " ?"
Style = vbYesNo + vbDefaultButton2
Réponse = MsgBox(Texte, Style)
If Réponse = vbYes Then
Range("A" & i & ":U" & i).Copy Destination:=Sheets("NPAI").Range("A" & Sheets("NPAI").Range("A" & Rows.Count).End(xlUp).Row + 1)
Rows(i).Delete Shift:=xlUp
Range("G1").Select
Else
Exit Sub
End If
End SubTu ne dois pas placer tes boutons sur des lignes qui peuvent être effacées, au risque que ces boutons soient masqués au bout d’un moment, si la ligne ou les lignes sur la ou lesquelles ils se trouvent sont effacées. Ainsi tu avais apparemment « perdu » tes boutons
« CommandButton2 » et « CommandButton3 » que j’ai à nouveau agrandis.
Cordialement.
Bonjour Yvouille !
Un grand merci pour ton aide !
Je n'avais pas eu le temps cette semaine de m'y remettre, mais hier grâce à ta réponse et en potassant les fonctions VBA, la macro finale a vu le jour :
Sub annulation_usager_archivage()
On Error GoTo Erreur:
' annulation_usager_archivage Macro
' Macro enregistrée le 26/04/2013 par Danie
'
' Touche de raccourci du clavier: Ctrl+a
'
' dim : déclaration de la variable ; la syntaxe est : dim [chaîne de caractères sans espace représentant la variable]
' As : attend le type de la variable ;
' Long : type de variable Numérique : entier de - 2'147'483'648 à 2'147'483'647 : symbole : & (le nombre de lignes possibles est 65536
' deux syntaxes possibles : 1) dim no_ligne as long 2) dim no_ligne &
' "&" étant le symbole de "as long"
Dim no_ligne As Long
' afficher le message entre guillemets et recuperer le n° rentré dans no_ligne
no_ligne = InputBox("n° de ligne à transférer dans la feuille 'NPAI' : ")
' empecher la suppression des lignes de titre et oblige un n° de ligne positif
If no_ligne < 2 Then
MsgBox ("impossible")
Exit Sub
End If
' demande de confirmation de la suppression
Sheets("usagers").Select
' Range(Cells(no_ligne, "a")).Select
' Range(Cells(no_ligne, "B")).Select
' rows(i) signifie ligne([n°de ligne])
result = MsgBox("voulez vous annuler cet usager (O/N) : " & Cells(no_ligne, "a") & " " & Cells(no_ligne, "B") & " ?", vbYesNo, "Demande de confirmation de l'annulation")
If result = vbNo Then
Exit Sub
End If
' selection des cellules de la ligne correspondante au n° de ligne
' et copie des cellules de la ligne selectionnée dans la feuille NPAI à la suite des lignes déjà écrites
'mettre en mémoire les cellules de la ligne en demande d'annulation
'copier ces cellules sur la feuille npai à la première ligne vide
' demander à quelle date doit être enregistreée l'annulation et pour quelle raison"
saisie_date:
annul_date = InputBox("date d'annulation de la domiciliation : ", "information concernant l'annulation de la domiciliation de :" & Cells(no_ligne, "a") & " " & Cells(no_ligne, "B"), Format(Date, "dd/mm/yyyy"))
' contrôle sur la date saisie
On Error GoTo Erreur:
If annul_date = "" Then
annul_date = Format(Date, "dd,mm,yyyy")
GoTo raison:
End If
If Not IsDate(annul_date) Then
MsgBox "Format de date saisie incorrect !"
GoTo saisie_date
End If
If CDate(annul_date) > Date Then
MsgBox "La date doit être inférieure à la date d'aujourd'hui !"
GoTo saisie_date
End If
If annul_date <> Format(annul_date, "dd/mm/yyyy") Then
MsgBox "le format doit être jj/mm/aaaa !"
GoTo saisie_date
End If
' on continue car la date saisie est valide
raison:
annul_raison = InputBox("raison de l'annulation : ")
' on récupère les infos usagers et date saisie et raison saisie
Range("A" & no_ligne & ":E" & no_ligne).Select
Selection.Copy
' on va sur la première ligne vide de la feuille "npai"
Sheets("NPAI").Select
Dim premiere_ligne_vide As Long
premiere_ligne_vide = Worksheets("npai").Range("a" & Cells.Rows.Count).End(xlUp).Row + 1
'on selectionne les cellules "npai" à recevoir la copie
Range("A" & premiere_ligne_vide & ":E" & premiere_ligne_vide).Select
' Cette méthode colle le contenu du Presse-papiers dans la feuille.
ActiveSheet.Paste
' on copie la date et la raison annulation
'
' Range("F" & premiere_ligne_vide).Select
Worksheets("npai").Range("f" & premiere_ligne_vide) = annul_date
' Range("G" & premiere_ligne_vide).Select
Worksheets("npai").Range("G" & premiere_ligne_vide) = annul_raison
' supression de la ligne sélectionnée dans la feuille USAGERS :
' aller sur la feuille "usager"
' aller sur la ligne indiquée ar no_ligne
' fonction supprimer
Sheets("usagers").Select
Rows(no_ligne).Select
Selection.Delete Shift:=xlUp
' test de saisie de la touche annulation ou de la croix rouge car renvoie un message d'erreur 13
Erreur:
If Err.Number = 13 Then
Exit Sub
End If
End Sub
Maintenant, il faut que je potasse les boutons.
Je te souhaite une excellente semaine et encore merci pour ton aide !
Cordialement,
Danie.