pb sur macro

JULIANSAT

XLDnaute Junior
Bonjour

Svp, voir le fichier excel joint.

En « feuil1 », j’ai des valeurs importées.
En colonne K je réalise une concaténation des colonnes B et C pour avoir le N° complet du plan.
Sur la feuille « Résultat par macro », je souhaite retrouver, pour un même n° de plan complet, le nbr de pièces total et récupérer les 2 colonnes « Désignation » et « Peinture » .

Echec avec la macro proposée.

Merci pour vos aides

Cordialement

Julian

---------------------------------------------------------------------------
Sub MACROTEST()
Dim cel As Range
Dim CompteurDeLigne As Long


Sheets("Résultat par macro").Range("B17:F200") = ""
For Each Cell In Sheets("Feuil1").Range("B10:B" & Sheets("Feuil1").Range("B65536").End(xlUp).Row)
If Cell.Offset(0, 2) <> "" Then
NumPlanComplet = Cell.Offset(0, 9)
Désignation = Cell.Offset(0, 2)
Peinture = Cell.Offset(0, 3)
Nbr = Cell.Offset(0, 4)
CompteurDeLigne = 5
Do Until Sheets("Résultat par macro").Cells(CompteurDeLigne, 1) = ""
If Sheets("Résultat par macro").Cells(CompteurDeLigne, 1) = NumPlanComplet Then
Sheets("Résultat par macro").Cells(CompteurDeLigne, 2) = Sheets("Résultat par macro").Cells(CompteurDeLigne, 2) + Nbr
GoTo Autre
End If
CompteurDeLigne = CompteurDeLigne + 1
Loop
Sheets("Résultat par macro").Cells(CompteurDeLigne, 1) = NumPlanComplet
Sheets("Résultat par macro").Cells(CompteurDeLigne, 2) = Nbr
Sheets("Résultat par macro").Cells(CompteurDeLigne, 3) = Désignation
Sheets("Résultat par macro").Cells(CompteurDeLigne, 4) = Peinture
End If


Autre:
Next

End Sub
 

Pièces jointes

  • Essais macro.xls
    39 KB · Affichages: 40
  • Essais macro.xls
    39 KB · Affichages: 52

Robert

XLDnaute Barbatruc
Repose en paix
Re : pb sur macro

Bonjour Julian, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim o1 As Object 'déclare la variable o1 (Onglet 1)
Dim o2 As Object 'déclare la variable o2 (Onglet 2)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim c As Integer 'déclare la variable c (Compteur)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

Set o1 = Sheets("Feuil1") 'définit l'onglet o1
Set o2 = Sheets("Résultat par macro") 'définit l'onglet o2
Set pl = o1.Range("K10:K" & o1.Cells(Application.Rows.Count, 11).End(xlUp).Row) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les celllules cel de la plage pl
    'condition 1 : si la désignation est renseignée et la couleur de fond de la cellule n'est pas rouge
    If cel.Offset(0, -7).Value <> "" And cel.Interior.ColorIndex <> 3 Then
        c = 0 'réinitialise le compteur c
        Set r = pl.Find(cel.Value, , xlValues, xlWhole) 'définit la recherche r
        If Not r Is Nothing Then 'condition 2 : si il existe au moins une occurrence
            pa = r.Address 'définit la première adresse de l'occurrence trouvé
            Do 'exécute
                r.Interior.ColorIndex = 3 'colore de rouge le fond de l'occurrence
                c = c + r.Offset(0, -5) 'actualise le compteur c
                Set r = pl.FindNext(r) 'redéfinit la recherche (occurrence suivante)
            Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
        End If 'fin de la condition 2
    Set dest = o2.Cells(Application.Rows.Count, 2).End(xlUp).Offset(1, 0) 'définit la cellule de destination
    dest.Value = cel.Offset(0, -9).Value 'place le format plan
    dest.Offset(0, 1).Value = cel.Offset(0, -8).Value 'place le Nº Plan
    dest.Offset(0, 2).Value = cel.Offset(0, -7).Value 'place la désignation
    dest.Offset(0, 3).Value = cel.Offset(0, -6).Value 'place la peinture
    dest.Offset(0, 4).Value = c 'place le compteur
    End If 'fin de la condition 1
Next cel 'prochaine cellule cel de la boucle
pl.Interior.ColorIndex = xlNone 'supprime la couleur de fond rouge
End Sub
Le fichier :
 

Pièces jointes

  • Juliansat_v01.xls
    43 KB · Affichages: 36
  • Juliansat_v01.xls
    43 KB · Affichages: 39
  • Juliansat_v01.xls
    43 KB · Affichages: 39

JULIANSAT

XLDnaute Junior
Re : pb sur macro

Bonjour Robert, bonjour à tous.

Merci beaucoup.

Cela fonctionne très bien

J'ai vu que tu étais passé par un coloriage des fonds des cell
Hier soir, je me demandais si on ne pouvait pas passer par des fonctionnalités de fct "tableau croisé dynamique".......

Bonne journée.

Julian
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : pb sur macro

Bonjour Julian, bonjour le forum,

Parce que la plage de départ dans le code est la colonne K :
Code:
Set pl = o1.Range("K10:K" & o1.Cells(Application.Rows.Count, 11).End(xlUp).Row) 'définit la plage pl
le nombre se trouve dans la colonne F. Donc par rapport à K ça fait un offset de (0, -5)...

À quoi ça sert que je me décarcasse à commenter le code ???
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : pb sur macro

Bonjour Julian, bonjour le forum,

Oui tu as raison, c'est pas simple, et j'aurais dû me souvenir de l'époque où je galérais. Néanmoins, le code que tu as proposé dans le premier post est loin d'être celui d'un débutant...
 

JULIANSAT

XLDnaute Junior
Re : pb sur macro

Bonjour Robert, bonjour à tous.
Désolé pour te déranger de nouveau.

Sur la feuille "résulat par macro" , si je souhaite que la liste démarre à partir d'une cellule donnée ( ex H20), comment faire ?
La cellule au dessus ne sera pas vide.

Merci beaucoup.

Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : pb sur macro

Bonjour Julian, bonjour le forum,

C'est la cellule de destination dest qui doit-être modifiée :
Code:
Set dest = IIf(o2.Range("H20").Value="", o2.Range("H20"), o2.Cells(Application.Rows.Count, 8).End(xlUp).Offset(1, 0))
Ce code signifie : dest = H20 si H20 est vide, sinon, dest = la première cellule vide de la colonne H...
 

JULIANSAT

XLDnaute Junior
Re : pb sur macro

Bonjour.

J'ai testé ma feuille excel, avec différentes macros, sur plusieurs PC. Pas de pb sur les machines en 64 bits et sous office 2007.
J'ai deux machines identiques avec excel 2003. Sur l'une, j'ai un pb. L'export des données depuis la CAO se réalise très bien. Les données sont dans les bonnes cellules. Lorsque j'active la macro principale, j'ai un message d'erreur " erreur sur exécution 13 incompatibilité de type".
Les données sur les différentes feuilles se retrouvent dans d'autres cellules .
Sur l'autre machine pas de pb. D’où peut provenir le pb ???
Merci
Julian
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 628
Membres
103 613
dernier inscrit
luluinmauritius