Macro et fonction INDEX

  • Initiateur de la discussion Initiateur de la discussion grandgoret
  • 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 !

G

grandgoret

Guest
Bonjour a toutes et a tous,

Je travaille actuellement sur une base de donnée qui utilise des
comptages de circulation.
Dans le fichier joint, je souhaiterais créer une macro qui effectue la recherche
dans le tableau double entrée (situé entre AM et AT) mais pour toutes les lignes des colones C et D ( plutôt que d avoir a incrémenter la formule située en E2). Dans le fichier final et non pas dans cet extrait , il y a environ 2000 lignes.
Et si, pour une ligne donnée, la valeur de la case "jour" est égale a 0, je souhaiterais inscrire, dans la ligne correspondante et dans la colone Coefficient, la moyenne arithmetique des coefs correcteurs ( donc issus du tableau a double entrée entre AM et AT) des lu, mar,me,je et ve ( donc tous les jours sauf samedi et dimanche) correspondant au mois a côté duquel le 0 figure. Par exemple en ligne 14, colone D, comme il y a 0 en colone C, je souhaiterais obtenir, dans la cellule E14, la moyenne demandée pour le mois indiqué ( novembre ici). Est ce possible ?
Merci d`avance pour votre aide !!
 

Pièces jointes

Re : Macro et fonction INDEX

Bonjour

Une solution avec le code suivant à copier dans un module Standard.
Adaptez à votre usage les constantes cernées par des ###
Code:
'### Constantes à adapter ###
Const FEUILLE As String = "test"       'nom de la feuille concernée
Const CORRECTEUR As String = "am2:at14" 'adresse de la plage du coefficient correcteur
'############################
Sub CalculCoeff_pmo()
Dim S As Worksheet
Dim R As Range
Dim Source
Dim var
Dim i&
Dim j&
Dim lig&
Dim col&
Dim A$
Dim x#
On Error GoTo Erreur
Set S = Sheets(FEUILLE)
S.Activate
Set R = Range(CORRECTEUR)
Source = R
Set R = Range("c2:e" & [a65536].End(xlUp).Row & "")
var = R
For i& = 1 To UBound(var, 1)
  lig& = 0
  col& = 0
  x# = 0
  A$ = LCase(var(i&, 1))      'jour
  If var(i&, 1) <> 0 Then
    For j& = 2 To UBound(Source, 2)
      If A$ = LCase(Source(1, j&)) Then
        col& = j&
        Exit For
      End If
    Next j&
    A$ = LCase(var(i&, 2))      'mois
    For j& = 2 To UBound(Source, 1)
      If A$ = LCase(Source(j&, 1)) Then
        lig& = j&
        Exit For
      End If
    Next j&
    If lig& > 0 And col& > 0 Then
      var(i&, 3) = Source(lig&, col&)
    End If
  Else
    A$ = LCase(var(i&, 2))      'mois
    For j& = 2 To UBound(Source, 1)
      If A$ = LCase(Source(j&, 1)) Then
        lig& = j&
        Exit For
      End If
    Next j&
    For j& = 3 To UBound(Source, 2) - 1 'moyenne
      x# = x# + Source(lig&, j&)
    Next j&
    var(i&, 3) = x# / 5
  End If
Next i&
R = var
Exit Sub
Erreur:
If Err = 9 Then
  MsgBox "La feuille " & FEUILLE & " est introuvable."
Else
  MsgBox "Erreur " & Err.Number & vbCrLf & Err.Description
End If
End Sub
Activez la feuille concernée et lancez la macro CalculCoeff_pmo

Cordialement.

PMO
Patrick Morange
 
Re : Macro et fonction INDEX

bonjour,

merci beaucoup pour votre reponse rapide. La macro marche parfaitement
et fait exactement ce que je voulais =). Vous avez meme fait du zele avec le systeme d erreur .
merci encore !
 
- 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
Microsoft 365 INDEX equiv
Réponses
1
Affichages
207
Réponses
5
Affichages
917
Réponses
20
Affichages
1 K
Retour