Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Programamtion d'une macro

  • Initiateur de la discussion Initiateur de la discussion olivius
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

O

olivius

Guest
Bonjour à tous,

Ayant plusieurs fois consulté les discussions pour parvenir à mes fins, c'est à mon tour aujourd'hui de vous demander de l'aide !

Je vous explique: Il faudrait que je puisse créer une macro qui permettrait de comparer une cellule (A1 par exmple) avec la cellule en dessous (A2).
Si A1= A2, on va checker si A2=A3, et ainsi de suite jusqu'à ce que Ax <> Ax+1.

Un compteur va nous permettre de savoir combien il y a de cellules ont la même valeur, (exmple: A1= A2, A2=A3, A3 <>A4, donc 3).

Lorque les cellules n'ont pas la même valeur (A1<>A2), on compte donc 1.

Et cette macro s'effectuerait jusqu'à ce qu'elle rencontre une cellule vide.


Quelqu'un aurait-il une idée ?

Merciii 😀
 
Re : Programamtion d'une macro

Bonjour olivius,

Bienvenue sur XLD,

en fonction de là où tu veux écrire tes résultats de comptage, ça doit pouvoir se faire avec une formule (NB.SI), pourquoi le faire en VBA ?
 
Re : Programamtion d'une macro

Pour automatiser le truc au maximum! D'autres personnes vont être ammenées à le manipuler et ca court à la catastrophe :s
De plus, ce que j'ai omis de dire, C'est qu'à chaque fois, on va extraire la première ligne de la référence pour la coller dans un autre onglet... mais ca, je sais comment le faire!
Je suis en train de préparer un exemple pour être le plus clair possible!
 
Re : Programamtion d'une macro

Bonjour Olivius, Tototiti2008, le forum,

On peut également faire avec un Tableau Croisé Dynamique, qui fait l'analyse et le comptage des doublons même si ceux-ci ne sont pas les uns en dessous des autres. Rapide et efficace. Voir les fichiers joints pour exemples.

Sinon, on peut en effet faire cela avec une macro mais il faudra peut être prendre en compte les doublons et le fait que les valeurs ne seront pas toujours forcément triées par ordre croissant. Exemple, si comme dans l'explication A1=A2=A3, A3<>A4, et qu'ensuite A5=A3 et A6=A7, qu'attend t-on comme résultat au compteur? 6? 5? Quel est le but de ce comptage dans l'analyse des données?

Un compteur va nous permettre de savoir combien il y a de cellules ont la même valeur, (exmple: A1= A2, A2=A3, A3 <>A4, donc 3).

Lorque les cellules n'ont pas la même valeur (A1<>A2), on compte donc 1.

Un petit fichier éclaircirait surement un peu les choses... 😉

Bonne journée 🙂
 

Pièces jointes

Dernière édition:
Re : Programamtion d'une macro

Re,

Je viens de jeter un œil à ton fichier exemple et il est certain que le TCD ("Pivot Table" en anglais) va être la réponse à ton pb. Il va même te fournir directement le tableau-bilan que tu as dans ta feuille "Sheet2". Voir ci joint dans la feuille TCD.

Si tu veux vraiment passer par une macro, fais un nouveau post, et on regardera cela...

Bonne journée 🙂
 

Pièces jointes

Re : Programamtion d'une macro

Bonjour Pedrag31,

Merci de t'être penché sur mon cas.
Pour répondre à tes questions, les références dans la colonne A seront tjrs classées par ordre ! de ce fait, soit les références peuvent être les mêmes d'une ligne à l'autre soit elles changent!
On pourra pas trouver par exemple A1= A18..
J'aime beaucoup l'idée du TCD, après tout, cela est suffisant ! Il faut que je trouve le moyen maintenant d'y intégrer l'intégralité de la1ère ligne.. (pour reprendre l'exemple, ROWLABEL "Alpha", Count "3", et retrouvez les données X, Y, Z!
 
Re : Programamtion d'une macro

Re,

Le TCD est intégré à Excel, c'est en effet aussi bien de le mettre à profit 😉
Voir ci joint, il faut basculer en affichage classique pour faire cela "Pivot Table Options / Display / Classic PivotTable layout" en anglais...

Bonne journée 🙂
 

Pièces jointes

Re : Programamtion d'une macro

Merciiii !
tu viens de me faire gagner un temps précieux et sauver mes cheveux de quelques tortures !!

Bonne journée 🙂
 
Re : Programamtion d'une macro

Hmm...j'ai encore une question...
N'est-il pas possible de jertter ttes les lignes vides dans le tcd ?
Le truc étant que derrière, j'ai une macro qui va calculer des ratios en fonction des colonnes selectionnées..
j'aimerais qu'il y est que les lignes pleines qui apparaissent avec , en dernière colonne, le nombre de lignes (ref Alpha par exemple) qui apparait (dans notre cas 3)
cela nous donnerait donc

REF_ALPHA x y z 3(lignes)
REF_Bêta x y z 1
REF_Gamma x y z 2
Etc...
 
Re : Programamtion d'une macro

Re,

Beh malheureusement non 🙁, on ne peut pas enlever les lignes "blanks" car le TCD est rigoureux, si tu filtres pour ne pas prendre en compte les lignes vides, il va te donner Alpha=1 (au lieu de Alpha=3 avec les lignes blanches)...

Et puis une macro qui vient travailler sur un TCD c'est compliqué car le TCD peut changer de taille lorsqu'on le met à jour...
Je pense qu'il va falloir faire une macro... Je regarde ça quand j'ai un peu de temps tout à l'heure...

Bonne journée 🙂
 
Re : Programamtion d'une macro

Re,

Ca y est, j'ai fait la macro de comptage. Voir fichier ci-joint.

Note: Il faut que les désignations de la colonne A soient classées par ordre croissant et strictement identiques lorsqu'il s'agit de désignations similaires (pas d'espaces après, accents, etc...).

Code commenté pour t'aider:

VB:
Private Sub CommandButton1_Click()
Dim Ligne As Integer 'déclaration des variables
Worksheets("RAPPORT").UsedRange.Clear 'on vide la feuille "rapport"
ValeurCellulePrecedente = "" 'on initialise la valeur de cellule précédente à vide
Ligne = 1 'on initialise la ligne de copie à 1

'ici on fait une boucle sur les cellules "cell" de la colonne A, jusqu'à la dernière ligne utilisée dans la feuille "sheet1"
For Each cell In Worksheets("Sheet1").Range("a1:a" & Worksheets("Sheet1").UsedRange.Rows.Count)
    
    If ValeurCellulePrecedente <> cell.Text Then 'test si la cellule "cell" n'est pas égale à la valeur précédente
        Worksheets("Sheet1").Rows(cell.Row).Copy Destination:=Worksheets("RAPPORT").Range("A" & Ligne) 'copie de la ligne
        Worksheets("RAPPORT").Range("E" & Ligne).Value = 1 'compteur à 1
        Worksheets("RAPPORT").Range("E" & Ligne).NumberFormat = "0" 'format nombre entier
        ValeurCellulePrecedente = cell.Text 'on met à jour la valeur précédente avec la valeur de la "cell" en cours
        Ligne = Ligne + 1 'on incrémente la ligne de copie (destination dans "RAPPORT" de 1
    Else 'sinon, lorque la cellule "cell" est égale à la valeur précédente
        Worksheets("RAPPORT").Range("E" & Ligne - 1).Value = Worksheets("RAPPORT").Range("E" & Ligne - 1).Value + 1 'on incrémente le compteur de 1 pour la ligne d'avant
    End If
    
Next cell

MsgBox "Rapport de " & Ligne & " ligne(s)effectué!"
Worksheets("RAPPORT").Activate
End Sub

Bonne journée 🙂
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Réponses
4
Affichages
584
Réponses
3
Affichages
438
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…