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 Sub

Cordialement.

8danie.zip (11.45 Ko)

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 :

Danie a écrit :

Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées".

Là, j'avoue ne plus trop savoir où tu en es
Yvouille a écrit :

Re-bonjour,

Ta question initiale était :

Danie a écrit :

Je voudrai savoir si il existe un moyen de créer une feuille récupérant les lignes annulées".

Là, j'avoue ne plus trop savoir où tu en 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 Sub

Tu 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.

Rechercher des sujets similaires à "feuille lignes annulees"