Tri de tableau

wampus

XLDnaute Nouveau
Bonjour à tous je viens une fois encore faire appel à vos conseils.:rolleyes: Je suis toujours dans mes tris de tableau et j’aimerais extraire des données en les triant mais malheureusement je n’y arrive pas. Je vous explique.

J’ai un tableau de 7 colonnes allant de B à H. Je parcours mon tableau à taille variable et cherche toutes les cellules de la colonne D qui ont pour valeur « ATROUVER ». Rien de bien compliqué jusque la :p

J’aimerais que lorsque ma boucle trouve cette valeur elle copie la valeur situé en colonne F dans la cellule C de ma feuille 2 et juste à coté qu'elle incremente un compteur à chaque fois que la valeur est présente dans mon tableau. Le problème c’est que dans ma feuille 2 je trouve plein de valeur en double, quadruple …. Avec le compteur qui s’incrémente pas au bon endroit. J’aimerai donc qu’il y ait qu’une seul fois une ligne pour chaque Intitulé.

En faite faudrait que je fasse une boucle qui regarde avant de copier si la valeur n’existe pas déjà et si c est le cas, elle s’incrémente… Pas évident ^^

J’espère que vous allez pouvoir m’aider et que j’ai pas été trop confus dans mon explication.
J’ai mis mon fichier pour être plus clair. :eek:

Merci.
 

Pièces jointes

  • Classeur2.xls
    40.5 KB · Affichages: 74
  • Classeur2.xls
    40.5 KB · Affichages: 74
  • Classeur2.xls
    40.5 KB · Affichages: 79
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Tri de tableau

Bonjour wampus
J’espère que vous allez pouvoir m’aider et que j’ai pas été trop confus dans mon explication.
Un peu, quand même. Par exemple :
lorsque ma boucle trouve cette valeur elle copie la valeur situé en colonne F dans la cellule C de ma feuille 2
Bien, mais des cellules C, il n'y en a guère que 65 500 et des poussières, dans la feuille 2. Laquelle choisit-on ?
En faite faudrait que je fasse une boucle qui regarde avant de copier si la valeur n’existe pas déjà et si c est le cas, elle s’incrémente
Il va être difficile d'incrémenter une valeur si la valeur n’existe pas déjà...
Et ça ne s'arrange pas lorsqu'on ouvre le classeur : le premier clic sur le bouton Lancer renvoie le message Impossible de trouver la macro "Classeur2-2.xls'!Extraction'..
Je crains qu'il faille revoir votre demande...​
À bientôt donc.
ROGER2327
 

wampus

XLDnaute Nouveau
Re : Tri de tableau

Merci pierrejean cette réponse était par rapport à mon dernier message ^^
J'ai un autre soucis ^^

ROGER2327 tu as raison je vais reprendre mon explication ...
Je vais essayer de faire un exemple:

Je vais faire un exemple avec trois colonnes. On est dans une boulangerie
Imaginons la première colonne intitulé Client avec leur Prénom, la deuxième avec leur achat (pains baguette ...) et la troisième la date d'achat.

J'aimerais voir combien de pain ont été acheté par clients donc pour ça je dois:

-parcourir le tableau
-regarder si achat est bien "PAIN"
-prendre le nom
-copier le nom et incrementer un compteur qui me dira ensuite combien de pain il a acheter

J'ai refais mon fichier et je me suis assuré qu'il fonctionne
 

Pièces jointes

  • Exemple.xls
    37.5 KB · Affichages: 54
  • Exemple.xls
    37.5 KB · Affichages: 60
  • Exemple.xls
    37.5 KB · Affichages: 64

wampus

XLDnaute Nouveau
Re : Tri de tableau

Au début j'avais trouver la solution de copier toutes les lignes avec tous les noms avec cet algo:

HTML:
Sub Extraire()

    Dim n, compteur As Integer
    
    For n = 3 To Range("B65536").End(xlUp).Row
    
        If Range("C" & n) = "Pain" Then
            Sheets("Feuil1").Range("B" & n).Copy Destination:=Sheets("Feuil2").Range("B" & n).End(xlUp).Offset(1, 0)
        End If
    Next n



End Sub

Et de compter en regardant a chaque fois en fonction du nom avec cet algo et de copier le resultat dans une cellule mais comme je ne connais pas tous les noms de client et que c est variable, je vais devoir copier cet algo pour chaque nom... Pas très recursif. Voila pourquoi j'aurais aimer faire quelque chose d'un bloc :confused:

HTML:
Sub ComptePierre()
    Dim n, compteur As Integer
    For n = 3 To Sheets("Feuil2").Range("B65536").End(xlUp).Row
        If Sheets("Feuil2").Range("B" & n) = [COLOR="Red"]"Robert"[/COLOR] Then
            compteur = compteur + 1
            [F10] = compteur
        End If
    Next n
End Sub
 

wampus

XLDnaute Nouveau
Re : Tri de tableau

Encore un grand MERCI pierrejean :eek:

Je commence tout juste le VBA (à peine une semaine de programmation) et j'ai quelques problèmes avec tout ce qui est récursif ....

J'aurais quelques questions si ce n'est pas trop demander ^^

Je ne comprend pas cette ligne :s :
Set c = Sheets("Feuil2").Range("B3:B" & Sheets("Feuil2").Range("B65536").End(xlUp).Row).Find(Range("B" & n), LookIn:=xlValues, lookat:=xlWhole)
Il me semble que le Set affecte à "c" ce qui se trouve après le =. Mais pourquoi lui affecter une valeur qui va de B3 à B" & Sheets("Feuil2").Range("B65536").End(xlUp).Row
et le reste de la ligne est également curieuse avec de lookIn et lookat que je n'ai jamais croisé^^ je vais essayer de trouver ca dans l explorateur d'objet :)

Et je ne crois pas avoir saisi à quoi server les Offset(0, 1) ?

Si vous pouviez m'éclairer un peu :)
 

pierrejean

XLDnaute Barbatruc
Re : Tri de tableau

Re

dans cette ligne

Set c = Sheets("Feuil2").Range("B3:B" & Sheets("Feuil2").Range("B65536").End(xlUp).Row).Find(Range("B" & n), LookIn:=xlValues, lookat:=xlWhole)

le mot clé est Find (Cherche)
Avant ce mot on definit la zone ou chercher (Feuil2 colonne B de la ligne 3 a la derniere ligne non vide
Ensuite les caracteristiques de la recherche:
Lookin:= xlvalues la recherche est faite sur la valeur
lookat:=xlwhole recherche Exacte (xlPart serait recherche 'a peu pres')
Enfin Set c donne le resultat sous forme de Range (d'ou le c.row qui est le numero de la ligne ou l'on a trouvé)
Pour un exemple complet de recherche Faire F1 sur le mot Findnext
Offset(0,1) permet de designer la cellule située sur la même ligne et dans la colonne située 1 colonne plus loin
 

wampus

XLDnaute Nouveau
Re : Tri de tableau

Super merci je vais me pencher sur tout ça. J'aurais sûrement bientôt d'autres questions sur la récursivité ^^ J'aimerais améliorer mon application qui fonctionne plutôt correctement mais qui est très lourde a tourner ... J'ai de multiples if imbriqué alors que je suis quasiment persuadé de pouvoir m'en sortir autrement surtout que je parcours plusieurs fois mon tableau ce qui allonge la durée d'exécution.

Merci encore :)
 

Statistiques des forums

Discussions
312 677
Messages
2 090 806
Membres
104 671
dernier inscrit
Guilbry