Insertion / déclage de cellules et report des données d'un tableau
Bonjour à tous,
Je travaille actuellement sur un fichier Excel dans lequel j'aimerais inclure de la programmation Macros VBA et j'ai grand besoin d'aide car mes connaissances sont quasi nulles.
Je joins mon fichier à ce message. Ce fichier servira à réaliser des contrôles. Les résultats d'un contrôle seront inscrits dans le tableau "Tableau de réalisation du contrôle" puis le "Tableau de récapitulatif des contrôles" reprendra quant à lui l'historique de ces contrôles (3 contrôles maximum resteront dans ce tableau d'historique / récap).
Voilà ce que je cherche à obtenir :
=> Lors de la réalisation du 1er contrôle :
- La date à laquelle est réalisé le contrôle est d'abord renseignée en A6
- Puis : si B10 non vide => alors insérer / décaler vers le bas (c'est-à-dire obtenir les mêmes cellules vides B10 à H10 avec le même format en B11 à H11 ; puis à nouveau si B11 non vide => alors insérer / décaler vers le bas de B12 à H12 ; etc... (a priori pour 100 lignes maximum si cette information a une importance)
- Puis à la fin du contrôle, il s'agirait de cliquer sur la forme (sur un bouton) "clôturer le contrôle", ce qui déclencherait :
- le fait de copier toutes les lignes du contrôle réalisé (c'est-à-dire les lignes B10 à H10, puis B11 à H11, etc...) dans le "Tableau de récapitulatif des contrôles" (donc le contenu de B10 à H10 irait en B3 à H3, puis B11 à H11 irait en B4 à H4, etc..., avec un système d'insertion / décalage de lignes dans le "Tableau de récapitulatif")
- le fait d'inscrire en A3, puis A4, puis A5, etc... la date inscrite en A6 (c'est-à-dire la date de réalisation du contrôle) autant de fois que le contrôle n°1 contiendra de lignes.
- le fait de faire revenir le
"Tableau de réalisation du contrôle" à son état d'origine (de façon à pouvoir réaliser un nouveau contrôle à une date ultérieure)
=> A la clôture du 2ème contrôle, même principe qu'auparavant : copiage des données du 2ème contrôle dans le "Tableau de récapitulatif des contrôles", sous les lignes du 1er contrôle, avec la date du 2ème contrôle en colonne A
=> A la clôture du 3ème contrôle, même principe
=> Puis à la clôture du 4ème contrôle => même principe mais : si 4 dates différentes en colonne A du "Tableau de récapitulatif" (ce qui sera le cas à la clôture du 4ème contrôle) => alors faire disparaître les lignes correspondant au 1er contrôle réalisé (=> donc le tableau de récapitulatif des contrôles ne pourra contenir au maximum que 3 dates différentes en colonne A, et donc le contenu de 3 contrôles uniquement)
[ Je ne sais pas si cette information peut être utile : le tableau de réalisation du contrôle ne devrait en principe pas excéder 100 lignes, et le tableau de récapitulatif ne devrait pas excéder 300 lignes ]
Je vous remercie par avance de tout conseil que vous pourriez me donner pour faire avancer ce projet.
Eric
bonjour
avant de faire compliqué, fais simple : un unique onglet, avec les colonnes toutes simples suivantes :
- date (format jj/mm/aa OBLIGATOIRE car Excel reconnaît les dates)
- nom ou référence du contrôle
- nom de l'élève
- résultat (tu peux créer diverses colonnes si tu as divers résultats)
- commentaire (tu y saisiras tes commentaires si besoin)
bast !
cet onglet unique va te durer 20 ans, sans fin !
les récap se font sur d'autres onglets avec des TCD (si tu ne connais pas, il est temps)
nota : tu DOIS saisir date et réf à chaque ligne !
nota 2 : pas de VBA
bon travail
amitiés
Bonjour et merci pour ta réponse et tes conseils jmd
J'aimerais beaucoup faire plus simple mais malheureusement mes besoins sont bien ceux de mon premier message...
La demande initiale s'inscrit dans un projet plus vaste. C'est pourquoi je dois réaliser cette fonction d'insertion / décalage de cellules au sein d'un seul et même onglet. Si le projet dans son ensemble permettait qu'il y ait plusieurs onglets ou plusieurs fichiers, ce serait surement plus simple.
Si tu as quelques conseils par rapport à ma demande initiale, je suis preneur et je te remercie par avance.
Re bonjour jmd,
J'ai donc réfléchi à quelque chose de beaucoup plus simple
Voici mon nouveau fichier ci-joint.
Dans le tableau "Réalisation du contrôle", la date du contrôle sera en colonne A : toujours la même date donc.
Lorsqu'on clique sur le bouton "Clôturer le contrôle", il faudrait :
- que les données du tableau "Réalisation du contrôle" se copient-collent dans le tableau "Historique et suivi des contrôles"
- que le tableau "Réalisation du contrôle" redevienne vide, permettant de réaliser un nouveau contrôle à une autre date
Idem jusqu'au 3ème contrôle (donc une 3ème date).
Lorsqu'on clôture le 4ème contrôle, idem, mais les données du 1er contrôle réalisé s'effacent définitivement du tableau "Historique et suivi des contrôles". De sorte que seules les données de 3 contrôles (donc de 3 dates différentes) soient présentes dans le tableau "Historique et suivi des contrôles".
Aurais-tu des conseils sur la façon de procéder ?
Merci d'avance
Eric
Bonjour à tous
Pourquoi fusionner les colonnes Commentaire et pas une seule colonne plus large ?
Excel 2000 est tellement ancien (19 ans en informatique c'est comme un siècle) que cela limite de facto l'usage...
Si je comprends bien tu contrôles une seule chose ou bien le numéro est un identifiant à prendre en compte avec la date pour identifier un contrôle ?
Bonjour et merci de ton message,
Effectivement, nul besoin de fusionner les colonnes.
Ci-joint le même document avec une seule colonne pour "Commentaires".
Merci d'avance si tu as des conseils par rapport à ma demande
Très bonne journée
Bonjour et merci de ton message,
Effectivement, nul besoin de fusionner les colonnes.
Ci-joint le même document avec une seule colonne pour "Commentaires".
Merci d'avance si tu as des conseils par rapport à ma demande
Très bonne journée (avec le doc joint c'est mieux...)
RE
Il n'était pas utile de joindre un doc sans fusion mais il le serait de répondre à la question posée concernant les identifiants...
oui pardon...
En colonne A : une seule et unique date, la même sur toutes les lignes, puisque ce sera la date à laquelle on réalise le contrôle
En colonne B : le résultat aura en réalité le forme d'une date, mais qui peut changer toutes les lignes (je n'ai pas voulu qu'il y ait de confusion avec la colonne A, donc je l'ai nommé "Résultat", mais en réalité ce sera une date fluctuante)
En colonne C : un numéro, qui pourra aller de 1 à 999
En colonne D : un commentaire libre.
J'espère que cela répond à ta question ?
Bonjour,
C'est formidable ! Un grand grand merci !
Juste une petite chose, si toutefois ce n'est pas trop pénible à réaliser : serait-il possible que les dates se classent de façon décroissante dans le tableau d'historique et de suivi des contrôles (c'est-à-dire que les données du dernier contrôle effectué soit en haut de ce tableau, puis l'avant-dernier contrôle effectué, et enfin l'avant-avant dernier contrôle effectué).
SI c'est trop compliqué, ce n'est pas grave du tout
Encore une fois mille mercis !
Et très bonne fin d'année
Bonjour
Ajoute à la fin, entre Selection.AutoFilter et End With
'Tri
Derlig2 = .Range("I" & Cells.Rows.Count).End(xlUp).Row
With ActiveWorkbook.Worksheets("Controle_vierge_").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("I4"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortTextAsNumbers
.SetRange Range("I4:L" & Derlig2)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
Bonjour,
De mémoire l'objet SortFields est apparu avec Excel 2007 !...
Si blackmalkmns travaille réellement avec Excel 2000, cela va poser une souci.
Cdlt.
RE
Arf !
J'avais oublié qu'il vivait dans la préhistoire, lol
Faudrait que je remette en route un vieux PC avec 98 et 2002 pour tester...
On verra l'an prochain, sauf si une bonne âme se dévoue... ou un petit appel à l'enregistreur macros par blackmalkmus pour adapter
Bon réveillon à tous
C'est absolument parfait !
Un immense merci !
Et un excellent début d'année !
Eric
(PS : je dispose également d'Excel 2010)
Bonjour,
Mes meilleurs vœux !...
@ blackmalkmus
Pense à modifier ton profil.
Cdlt.
C'est fait merci
Bonjour à tous,
Je me permets de revenir vers vous car j’ai des difficultés à comprendre la macro :
Sub Cloture()
With ThisWorkbook.Worksheets("Controle_vierge_")
Derlig1 = .Range("A" & Cells.Rows.Count).End(xlUp).Row
If Derlig1 = 4 Then Exit Sub
Derlig2 = .Range("I" & Cells.Rows.Count).End(xlUp).Row + 1
.Range("A5:D" & Derlig1).Copy Destination:=.Range("I" & Derlig2)
.Range("A5:D" & Derlig1).ClearContents
.Range("I4").Select
If .AutoFilter Is Nothing Then Selection.AutoFilter Else If .AutoFilter.FilterMode = True Then .ShowAllData Else
'Suppression Dates
NbDate = 1
Date1 = CLng(.Range("I5").Value)
Mini = Date1
For i = 6 To Derlig2 + Derlig1 - 5
If CLng(.Range("I" & i).Value) <> Date1 Then
NbDate = NbDate + 1
If CLng(.Range("I" & i).Value) < Mini Then Mini = CLng(.Range("I" & i).Value)
Date1 = CLng(.Range("I" & i).Value)
End If
Next i
If NbDate >= 4 Then
.Range("$I:$L").AutoFilter Field:=1, Criteria1:="<=" & Mini, Operator:=xlAnd
.Range("$I5:$L" & Derlig2 + Derlig1 - 5).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
End If
Selection.AutoFilter
'Tri
Derlig2 = .Range("I" & Cells.Rows.Count).End(xlUp).Row
With ActiveWorkbook.Worksheets("Controle_vierge_").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("I4"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortTextAsNumbers
.SetRange Range("I4:L" & Derlig2)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End With
End Sub
Celle-ci répond parfaitement à ma demande initiale mais comme je ne la comprends pas, je n'arrive pas à l’adapter à mon « fichier réel » (mille fois désolé
Mon besoin est toujours le même que précédemment :
« Lorsqu'on clique sur le bouton "Clôturer le contrôle" :
- les données du tableau "Réalisation du contrôle" se copient-collent dans le tableau "Historique et suivi des contrôles"
- le tableau "Réalisation du contrôle" redevient vide, permettant de réaliser un nouveau contrôle à une autre date
A partir du 4ème contrôle réalisé,
les données du 1er contrôle réalisé s'effacent définitivement du tableau "Historique et suivi des contrôles". De sorte que seules les données de 3 contrôles (donc de 3 dates différentes) sont présentes dans le tableau "Historique et suivi des contrôles". »
J’ai aussi pensé à un autre besoin en faisant évoluer mon fichier : j’ai ajouté un bouton « Commencer un nouveau contrôle ». J’aurais souhaité que lorsqu’on clique sur ce bouton, une boîte de dialogue nous demande de "Renseigner la date du contrôle" => Si une date est saisie en colonne L (à partir de L18), alors la date du contrôle (saisie dans la boîte de dialogue) s'inscrit en colonne K de la même ligne, ceci se produisant à chaque fois qu'une date est saisie en colonne L ; sinon vide.
Par avance un grand merci si vous pouvez m'aider.
Bonjour
J'ai
- supprimé les fusions des cellules K15, S16 qui mettent le souk
- vidé les cellules de K18-S18 jusqu'en bas de lafeuille : il y avait des caractères parasites
- modifié le code
Pas bien compris la finalité de ta 2ème demande : pourquoi saisir en L d'une part et demander une saisie par formulaire d'autre part ?
Bonjour 78chris,
Un grand merci pour la rapidité de ta réponse !
En fait, la 2ème demande, c'est pour éviter de copier-coller la date du contrôle à chaque ligne de la colonne K (le fichier doit être "automatisé" au maximum). Les dates de la colonne L, quant à elles, n'ont rien à voir avec la date du contrôle et seront différentes à chaque ligne, elles nécessitent une saisie manuelle.
Merci d'avance si tu as la solution