Macro pour encadrer de maniere simple une base de donnees

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour à tous,

Je ne suis pas sûr de poster mon message dans la bonne rubrique. Donc d'avance dsl si je fais erreur.

Je cherche à programmer une petite macro sous Excel 2007 me permettant d'encadrer très simplement une base de donnée sous le schéma suivant :

-Dans la colonne B se trouve la série de données :
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
.
.
.
30
30
30
30
30
30
31
31
31

Il s'agit simplement d'un exemple. La longueur de ces données est dynamique et n'occupe donc pas un nombre de ligne fixe. Chaque série commence de 0 et est incrémentée jusqu'à une certaine valeur variable. Chaque valeur 0,1,2...est reportée de nombreuse fois à l'identique. C'est à dire que le chiffre 0 sera mis 10 fois de suite, puis on mettra 5 fois le chiffre 1, puis 129 fois le chiffre 2, puis 45 fois le chiffre 3 et ainsi de suite jusqu'à atteindre la valeur finale requise.

Mon objectif est de supprimer certaines lignes qui ne m'intéressent pas. Il S'agit de supprimer les 2 premières lignes et les deux dernières lignes associer à chaque chiffre.
Ainsi pour le chiffre 0 je vais supprimer les 2 premières lignes, garder le reste et finalement supprimer les 2 dernières lignes ou le chiffre 0 se répète. Ensuite on fait de même avec le chiffre 1 en supprimant ses 2 premières occurrences ainsi que ses 2 dernières. Il s'agit bien de supprimer TOUTE la ligne et pas uniquement une case.

Voila, pour résumer je cherche à épurer une liste de valeurs identiques par ses extrêmes en supprimant les 2 premières et 2 dernières lignes.

J'ai essayé avec des boucles et des condition mais je n'y parviens pas. Voila mon idée de départ^^

For i = 1 To i=n '(n étant le nombre de lignes total du tableau)

If Cells(i, 2) <> Cells(i + 1, 2) Then Rows("i:i-2").Select and Rows("i:i+2").Select '(on travail sur la colonne B)
Selection.Delete Shift:=xlUp

Next


Mais cela ne marche pas. Je suis trop débutant.

Merci à ceux qui pourrons m'éclairer par un petit bout de code^^

André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Salut MJ13,

Bien sur que je peux mettre un petit fichier en guise de mes explications^^

Je viens de le mettre en pièce jointe. Il s'agit d'un fichier Excel comprenant 7 colonnes. Sur ce fichier, tu pourras voir que ma première colonne est construite de la manière dont je l'ai décrite sur mon premier post. 0,1,2,3...

Sur ce fichier Excel je souhaite supprimer les 15 premières lignes ET les 15 dernières lignes dont le chiffre est identique. En fait les 15 premières lignes et les 15 dernières lignes ne m'intéressent pas car est sont parasitées. Donc je veux encadrer sur chaque chiffre pour ne conserver que le meilleur.

Quand je supprime les lignes, ces dernières remontent. Il faut donc commencer à supprimer à partir du bas du tableau et en remontant petit à petit. Il faudrait, je pense, isoler les 2 numéros de lignes qui correspondent au tout début d'une série et et à sa fin. Ainsi on pourrait plus facilement décider de supprimer les lignes par la suite. Je me trompe peut être hein ;)

Si tu as besoin de plus d'infos n'hésite pas. C'est déjà très sympa de ta part d'avoir pris le tps de me conseiller de poster un fichier d'application.

A plus
 

Pièces jointes

  • FICHIER D'APPLICATION.xls
    132.8 KB · Affichages: 63
  • FICHIER D'APPLICATION.xls
    132.8 KB · Affichages: 64
  • FICHIER D'APPLICATION.xls
    132.8 KB · Affichages: 69

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Salut Staple,

En effet j'ai essayé de télécharger mon propre fichier et sa m'a mis un message d'erreur à l'ouverture. Je l'ai de nouveau enregistré. En espérant que cette fois ci tout se passe bien. Je l'ai enregistré en tant que classeur Excel. Après pour son extension je ne suis pas l'expert. Sa devrait être bon.

En tout cas merci pour ta remarque pertinente. C'est Sympa de ta part.
 

Pièces jointes

  • FICHIER D'APPLICATION.xlsx
    132.6 KB · Affichages: 60

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Ah ben non, sa ma remis la même extension une fois uploadé sur le site. Ben je sais pas comment faire alors. En tout cas, c'est pas bien grave que sa sois pas la bonne extension au final. C'est simplement pour avoir une meilleure vision d'un fichier type. Sinon ben il reste toujours mes explications du début de la discussion. C'est la méthodologie et le raisonnement qui m’intéresse.

Un conseil pour aider à poster mon fichier sur le site, ou pour le code VBA désiré ?
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Merci Staple.

Je enregistré mon fichier Excel en "Excel 97-2003". Et bien voila vous disposez maintenant d'un fichier pour exemple.

Pour rappel, l'objectif consiste à supprimer certaines lignes de la base de données après les avoir correctement identifiées. Les explications se trouvent dans le premier post.

On travaillera uniquement la colonne numéro une qui contient les diverses séries de nombre entier.

Merci à ceux qui pourrons m'aider un peu.

PS : Voila la logique que je pensais employer :

- Récupérer la dernière ligne de mon tableau avec le code suivant

Max = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques

- Pour me rendre à la case la plus en bas de la table de données

Range("B1" & ":B" & Max).Select

- Pour accéder au contenu d'une cellule

Cells(i,1).Value

- Sa donnerais un truc comme sa pour l'instant

For i=Max to 1 Step -1

If Cells(i,1).Value<>Cells(i+1,1).Value Then

Rows("i:i-100").Delete
Selection.Delete Shift:=xlUp

End If
i=i-1

Next


Mais sa ne semble pas fonctionner....
 

Pièces jointes

  • FICHIER D'APPLICATION.xls
    291.5 KB · Affichages: 62
  • FICHIER D'APPLICATION.xls
    291.5 KB · Affichages: 67
  • FICHIER D'APPLICATION.xls
    291.5 KB · Affichages: 53

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Je ne vois pas beaucoup de réponses pour m'aider. Sa doit être l'effet vacances^^

Je vous poste ici le petit code que j'ai obtenu via un autre forum. Il ne fonctionne pas, enfin presque pas. Si quelqu’un sais le modifier et le rendre opérationnel ou simplement m'indiquer ou cela bloque sa serait sympa.

Code:
Sub Macro1()


Dim plage As Range, plage_a_supp As Range
 Dim nb As Integer
 Dim j As Integer
 
 
Cells(1, 1) = "0"
Cells(2, 1) = "0"
Cells(3, 1) = "0"
Cells(4, 1) = "0"
Cells(5, 1) = "0"
Cells(6, 1) = "0"
Cells(7, 1) = "0"
Cells(8, 1) = "0"
Cells(9, 1) = "0"
Cells(10, 1) = "0"
Cells(11, 1) = "1"
Cells(12, 1) = "1"
Cells(13, 1) = "1"
Cells(14, 1) = "1"
Cells(15, 1) = "1"
Cells(16, 1) = "1"
Cells(17, 1) = "1"
Cells(18, 1) = "1"
Cells(19, 1) = "1"
Cells(20, 1) = "1"
Cells(21, 1) = "2"
Cells(22, 1) = "2"
Cells(23, 1) = "2"
Cells(24, 1) = "2"
Cells(25, 1) = "2"
Cells(26, 1) = "2"
Cells(27, 1) = "2"
Cells(28, 1) = "2"
Cells(29, 1) = "2"
Cells(30, 1) = "2"
Cells(31, 1) = "3"
Cells(32, 1) = "3"
Cells(33, 1) = "3"
Cells(34, 1) = "3"
Cells(35, 1) = "3"
Cells(36, 1) = "3"
Cells(37, 1) = "3"
Cells(38, 1) = "3"
Cells(39, 1) = "3"
Cells(40, 1) = "3"

Cells(1, 2) = "1"
Cells(2, 2) = "2"
Cells(3, 2) = "3"
Cells(4, 2) = "4"
Cells(5, 2) = "5"
Cells(6, 2) = "6"
Cells(7, 2) = "7"
Cells(8, 2) = "8"
Cells(9, 2) = "9"
Cells(10, 2) = "10"
Cells(11, 2) = "1"
Cells(12, 2) = "2"
Cells(13, 2) = "3"
Cells(14, 2) = "4"
Cells(15, 2) = "5"
Cells(16, 2) = "6"
Cells(17, 2) = "7"
Cells(18, 2) = "8"
Cells(19, 2) = "9"
Cells(20, 2) = "10"
Cells(21, 2) = "1"
Cells(22, 2) = "2"
Cells(23, 2) = "3"
Cells(24, 2) = "4"
Cells(25, 2) = "5"
Cells(26, 2) = "6"
Cells(27, 2) = "7"
Cells(28, 2) = "8"
Cells(29, 2) = "9"
Cells(30, 2) = "10"
Cells(31, 2) = "1"
Cells(32, 2) = "2"
Cells(33, 2) = "3"
Cells(34, 2) = "4"
Cells(35, 2) = "5"
Cells(36, 2) = "6"
Cells(37, 2) = "7"
Cells(38, 2) = "8"
Cells(39, 2) = "9"
Cells(40, 2) = "10"


nb = 5 ' ====>> pour en oter 5 à chaque extrémité.
If plage Is Nothing Then
    Set plage = Range("A1")
   Set plage_a_supp = plage
End If
   For i = 2 To Rows.Count ' je me moque même de déterminer la dernière ligne remplie
     If Range("A" & i).Value = Range("A" & i - 1).Value Then
       Set plage = Union(plage, Range("A" & i))
     Else
     If plage.Rows.Count >= nb Then
        For j = 1 To nb
          Set plage_a_supp = Union(plage_a_supp, plage(j, 1), plage(plage.Rows.Count + 1 - j, 1))
      Next
     Set plage = Range("A" & i)
     If Range("A" & i).Value = "" Then Exit For
     End If
     End If
  Next
   plage_a_supp.EntireRow.Delete
End Sub


Voici ci-dessus le code que j'utilise pour faire mes tests. Il est constitué de 2 colonnes. La deuxième ne sert que de contrôle pour s'assurer que l'on supprime bien les bonnes lignes, au bon endroit et au nombre désiré.

Voila, pour résumer je cherche à épurer une liste de valeurs identiques par ses extrêmes en supprimant les X premières et X dernières lignes de chaque séries. X étant fixé au préalable mais variable suivant l'utilisateur.

Merci à tout ceux qui pourront m'aider.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Macro pour encadrer de maniere simple une base de donnees

Bonjour


L'effet vacances combiné au fait ne pas signaler un crossposting pourrait en effet ...

Il est de coutume d'indiquer qu'on pose une question sur plusieurs forums.

(Enfin c'était le cas jadis, quand la netiquette avait encore un sens)
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Ah dsl je ne pensais pas que sa pouvait refroidir comme sa, le fait d'apprendre que j'ai utilisé 2 forums pour m'aider.

Le but étant de maximiser l'aide apporté, et également de croiser les points de vue. Étant vraiment débutant, je ne connaissais pas cette coutume. De toute les manières quel que sois le forum qui me viendras en aide, je posterais le code obtenu sur les 2 deux forums de manière à aider tous ceux qui pourront en avoir besoin.

Bien ceci étant dit, s'il reste des personnes capables d'apporter leur aide je suis preneur. Et m'excuse de ma maladresse^^

Le code que j'ai posté précédemment fonctionne en changeant 2 petites choses. Je le reposterais une fois plus étoffé pour ne pas poster 2 fois le même code avec une seule petite subtilité.

J'ai une question Staple, maintenant que la Macro permet d'encadrer de manière simple une base de donnée, j'aimerais poursuivre son développement. Cela passe par des opérations de moyenne et de suppression de ligne, ce qui n'a plus vraiment grand chose à voir avec cette discussion, mais sa garde un sens direct puisque c'est la suite.

Dois-je poursuivre mes questions ici ou dois-je créer une nouvelle discussion ?

Merci,
et merci Staple des conseils ;)
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro pour encadrer de maniere simple une base de donnees

Et bien dans ce cas la, je me lance.

-Dans la colonne 1 se trouve une série de données disposées comme suis

0
0
0
1
1
1
2
2
2
3
3
3


-Les données partent de 0 et vont jusqu'à X. X étant un nombre connu mais variable. C'est une série de nombre entier, ordonnée du plus petit au plus grand.
Chaque entier naturel est répété un certain nombre de fois. Dans mon exemple on compte de 0 à 3 en répétant chaque chiffre 3 fois. (c'est un exemple)

-Mon but est de calculer la moyenne sur certaines colonnes de la manière suivante. Je commence avec la première série de 0. Je fais la moyenne sur toute les lignes qui ont pour indice 0, j'insère une ligne, je note la moyenne et je supprimer toutes les valeurs qui m'on servi à calculer la moyenne. Je fais donc la moyenne pour la colonne A, B,...,F

-Ensuite je passe à l'entier naturel suivant, les 1. Et ainsi de suite.

-A la fin je souhaite obtenir un fichier ne représentant que les moyennes

Colonne1/Colonne 2/Colonne3....
0 XXX XXXX
1 XXX XXXX
2 XXX XXXX
3 XXX XXXX


-Pour l'instant j'utilise une instruction pour me calculer la moyenne

Formule = Application.Average(Range("A" & d, ":A" & u))

Mais je ne parviens pas à mettre une boucle en place pour gérer tout sa.

Voila si quelqu'un peut aider, merci
 

Staple1600

XLDnaute Barbatruc
Re : Macro pour encadrer de maniere simple une base de donnees

Re

Ta lanterne est restée éteinte ? :rolleyes:
Où est le lien indiquant la question posée sur un autre forum ?
Ceci afin d'éviter des réponses redondantes...

PS : un conseil esthétique en passant
En utilisant cette balise code.png, tu rendrais ton message plus agréable à lire
(Cela permet de formater le code VBA présent dans un message)
 

Pièces jointes

  • code.png
    code.png
    463 bytes · Affichages: 202
  • code.png
    code.png
    463 bytes · Affichages: 207
Dernière édition:

Discussions similaires

Réponses
22
Affichages
759
Réponses
7
Affichages
346

Statistiques des forums

Discussions
312 190
Messages
2 086 040
Membres
103 105
dernier inscrit
fofana