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 , mais toujours au sein du même onglet.

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
Puis on réalise un nouveau contrôle à une autre date, on clique à nouveau sur "Clôturer le contrôle" => les données du nouveau contrôle se copient-collent dans le tableau "Historique et suivi des contrôles", au-dessus des données du 1er contrôle. Et le tableau de "Réalisation du contrôle" redevient vide.

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

Ceci devrait répondre

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é , j’aurais dû mettre mon fichier réel en pièce jointe dès le départ). Du coup, je mets mon fichier réel en pièce jointe, en espérant que vous pourrez m’aider (à noter que j'ai modifié le nom de l'onglet en "Modele").

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
Puis même chose après le 2ème contrôle réalisé, les données du 2ème contrôle se classant au-dessus de celles du 1er contrôle dans le tableau "Historique et suivi des contrôles".

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 ! Je vais regarder ce que ça donne.

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

Rechercher des sujets similaires à "insertion declage report donnees tableau"