Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Compléter une macro

4 réponses
Avatar
Octave
Bonjour à tous...

Un retour dans le forum après quelques romanesques bataille contre ou avec
mon fournisseur internet...

Je souhaiterais compléter la macro que "docm" m'avait très efficacement
concoctée

Les références du messages étaient : (j'ai mis la macro complète à la fin du
message)
De :docm (docmarti@spamcolba.net)
Objet :Re: précisions de précisions
Date :2004-05-11 14:45:02 PST

Cette macro me permettait de passer dans une feuille de notes de ça :

Feuille 1 :

A B C D E ...

Dates ! Coef ! Note maxi ! Élève 1 ! Élève 2 ...
04/05/04 ! 2 ! 20 ! 12 !
06/05/04 ! 1 ! 5 ! !
06/05/04 ! 2 ! 20 ! ! 8
07/05/04 ! 2 ! 20 ! 14 ! 20
07/05/04 ! 1 ! 5 ! 3 !

A ça :

Feuille 2 :

A ! B ! C ! D
! Coef ! Coef ! Coef
! 2 ! 2 ! 1
! Note maxi ! Note maxi ! Note maxi
! 20 ! 20 ! 5
! ! !
Élève 1 ! 12 ! 14 ! 3
Élève 2 ! 8 ! 20 !

En respectant les regles suivantes :
Recopier l'indication dans feuille 2 si :
- elle appartient à un nom d'élève identique entre les deux feuilles
(colonne feuille 1 et ligne feuille 2)
afin de placer correctement la bonne indication pour le bon élève.
- le coefficient et la note maxi de la colonne feuille 2 est le même que
celui de la ligne feuille 1, si il n' y a pas d'indication alors reporter
l'indication en haut de la colonne, sinon si l'indication n'est pas la même
alors changer de colonne pour créer une nouvelle entrée.
- la cellule d'arrivée (feuille 2) est vide sinon changer de colonne en
indiquant le coef et la note maxi

Je souhaiterais obtenir la même chose mais maintenant j'ai aussi des codes
lettres dans mon tableau feuille 1 que je ne souhaite pas faire apparaître
dans la feuille 2. Cela paraît simple, pourtant ces codes lettres me donnent
l'impression de bloquer la macro qui s'arrête sur une erreur.

Si une ame charitable pouvait m'aider...

Merci d'avance.

Octave.


Rappel macro de docm :

Sub test()
FeuilleOrigine = "Feuil1"
FeuilleDestination = "Feuil2"

destLigneCoeff = 2
destLigneNoteMaxi = 5
destDerniereColonne = 2
destLigneEleve = 7

OrigineColonneCoef = 2
OriginecolonneNoteMaxi = 3
OriginePremiereColonneEleve = 4
OrigineDerniereColonneEleve = 6
OrigineLignePremiereDate = 2
OrigineLigneDerniereDate = 7

Sheets(FeuilleDestination).Select
Sheets(FeuilleDestination).Cells.Select
Selection.ClearContents
Sheets(FeuilleDestination).Range("A1").Select

For colonneEleves = OriginePremiereColonneEleve To
OrigineDerniereColonneEleve
eleve = Trim(Sheets(FeuilleOrigine).Cells(1, colonneEleves).Value)

y = y + 1
Sheets(FeuilleDestination).Cells(y + destLigneEleve, 1).Value = eleve

For ligne = OrigineLignePremiereDate To OrigineLigneDerniereDate

Note = Trim(Sheets(FeuilleOrigine).Cells(ligne, colonneEleves).Value)

If Note <> "" Then

coef = Trim(Sheets(FeuilleOrigine).Cells(ligne,
OrigineColonneCoef).Value)
NoteMaxi = Trim(Sheets(FeuilleOrigine).Cells(ligne,
OriginecolonneNoteMaxi).Value)

For c = 2 To destDerniereColonne

If Sheets(FeuilleDestination).Cells(y + destLigneEleve, c).Value = ""
Then

If Sheets(FeuilleDestination).Cells(destLigneCoeff, c).Value = "" Then

Sheets(FeuilleDestination).Cells(destLigneCoeff - 1, c).Value =
"Coef"
Sheets(FeuilleDestination).Cells(destLigneCoeff, c).Value = coef
Sheets(FeuilleDestination).Cells(destLigneNoteMaxi - 1, c).Value =
"NoteMaxi "
Sheets(FeuilleDestination).Cells(destLigneNoteMaxi, c).Value =
NoteMaxi
Sheets(FeuilleDestination).Cells(y + destLigneEleve, c).Value = 1 *
Note

If c >= destDerniereColonne Then
destDerniereColonne = c + 1
End If

Exit For
Else

If Val(Sheets(FeuilleDestination).Cells(destLigneCoeff, c).Value) =
Val(coef) Then
If Val(Sheets(FeuilleDestination).Cells(destLigneNoteMaxi, c).Value)
= Val(NoteMaxi) Then

Sheets(FeuilleDestination).Cells(y + destLigneEleve, c).Value = 1 *
Note

Exit For
End If
End If

End If
End If
Next
End If
Next
Next
End Sub

4 réponses

Avatar
docm
Bonjour Octave.

Pourrais-tu donner un exemple de tableau avec codes lettres qui causent
problèmes?
Avatar
docm
Bonjour Octave.


Tu peux remplacer

If Note <> "" Then
par
If IsNumeric(Note) = true Then


ou encore utiliser cette autre macro :

'----------------------------
Sub Macro1()
FeuilleOrigine = "Feuil1"
FeuilleDestination = "Feuil3"

Sheets(FeuilleDestination).Cells.ClearContents

Sheets(FeuilleOrigine).Select

NbreDeLignes = ActiveSheet.UsedRange.Rows.Count
NbreDeColonnes = ActiveSheet.UsedRange.Columns.Count

Cells(NbreDeLignes, NbreDeColonnes).Select

Range("B1:" & ActiveCell.Address).Select
Selection.Copy
Sheets(FeuilleDestination).Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone,
SkipBlanks:úlse _
, Transpose:=True
Range("A7").Select

'Eliminer les cellules vides
NbreDeLignes = ActiveSheet.UsedRange.Rows.Count
NbreDeColonnes = ActiveSheet.UsedRange.Columns.Count

For colonne = 2 To NbreDeColonnes
For ligne = 3 To NbreDeLignes
If Cells(ligne, colonne) = "" Or Not IsNumeric(Trim(Cells(ligne,
colonne))) Then
Coef = Cells(1, colonne)
notemaxi = Cells(2, colonne)

For x = colonne + 1 To NbreDeColonnes
NoteEleve = Cells(ligne, x)
If Trim(NoteEleve) <> "" Then
coef2 = Cells(1, x)
notemaxi2 = Cells(2, x)

If coef2 = Coef And notemaxi2 = notemaxi Then

Cells(ligne, colonne) = Cells(ligne, x)
Cells(ligne, x) = ""
Exit For
End If
End If
Next x

End If
Next ligne
Next colonne

'Supprimer les colonnes vides
For colonne = NbreDeColonnes To 2 Step -1
Vide = True
For ligne = 3 To NbreDeLignes
If Trim(Cells(ligne, colonne)) <> "" Then
Vide = False
End If
Next

If Vide = True Then

Columns(colonne).Select
Selection.Delete Shift:=xlToLeft
End If
Next

Exit Sub
'---------------
'Facultatif: Efectuer un tri horizontal

x = ActiveSheet.UsedRange.Columns.Count
Cells(1, x).Select
colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)

Columns("B:" & colonne).Select
Selection.Sort Key1:=Range("B3"), Order1:=xlDescending,
Key2:=Range("B4") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase: _
False, Orientation:=xlLeftToRight
Range("A1").Select
'---------------

End Sub



"Octave" wrote in message
news:ch6bud$s9q$
Bonjour docm, merci pour votre réponse

"docm" a écrit dans le message de
news:%235I%
Bonjour Octave.
Pourrais-tu donner un exemple de tableau avec codes lettres qui causent
problèmes?


Le tableau reste le même, mais les cellules peuvent aussi être remplies
par

ces fameux codes


A B C D E ...

Dates ! Coef ! Note maxi ! Élève 1 ! Élève 2 ...
04/05/04 ! 2 ! 20 ! 12 !
06/05/04 ! 1 ! 5 ! Abs !
06/05/04 ! 2 ! 20 ! Disp ! 8
07/05/04 ! 2 ! 20 ! 14 ! 20
07/05/04 ! 1 ! 5 ! 3 !

Et lors du "transfert" je souhaiterais que seules les notes, les notes
maxi

et les coefficients soient pris en compte.

Merci d'avance
Octave





Avatar
Octave
Bonjour docm, merci pour votre réponse

"docm" a écrit dans le message de
news:%235I%
Bonjour Octave.
Pourrais-tu donner un exemple de tableau avec codes lettres qui causent
problèmes?


Le tableau reste le même, mais les cellules peuvent aussi être remplies par
ces fameux codes


A B C D E ...

Dates ! Coef ! Note maxi ! Élève 1 ! Élève 2 ...
04/05/04 ! 2 ! 20 ! 12 !
06/05/04 ! 1 ! 5 ! Abs !
06/05/04 ! 2 ! 20 ! Disp ! 8
07/05/04 ! 2 ! 20 ! 14 ! 20
07/05/04 ! 1 ! 5 ! 3 !

Et lors du "transfert" je souhaiterais que seules les notes, les notes maxi
et les coefficients soient pris en compte.

Merci d'avance
Octave

Avatar
Octave
Bonjour "docm"

Merci pour vos réponses, je vais me regarder avec beaucoup d'attention vos
propositions.

Octave