Problème de boucle

Bonjour à toutes et tous,

Voici comment est fait mon fichier:

1/ un onglet "Base" où est ma base de données avec en ligne 1 les en-têtes

2/ un onglet ratio où je vais pouvoir calculer mes ratios par rapport à ma base

C'est un fichier RH, avec les initiales des personnes (colonne A), le salaire que la personne a eu durant cette année et la BU dans laquelle elle est.

Ainsi dans ma base j'ai concaténé l'année et la BU qui se situe dans ma base en colonne P.

J'ai entré ma base dans un tableau.

Puis j'ai deux critère dans la feuille "Ration" en A1 (année) et A3 (BU) que je peux sélectionner.

Je souhaite qu'il m'affiche dans la feuille "Ratio" en B2 puis en C2, D2...les initiales des personnes qui sont dans la BU durant cette année.

Voici mon code:

Sub ratio()

Dim derniere_ligne As Integer
Dim nocolonne As Integer
Dim ligne As Integer
Dim tab_bd2() As Variant
Dim i As Integer

derniere_ligne = Sheets("Base").Range("A1").End(xlDown).Row

ReDim tab_bd2(derniere_ligne - 2, 30)
For nocolone = 0 To 29
    For ligne = 2 To derniere_ligne
    tab_bd2(ligne - 2, nocolone) = Sheets("Base").Cells(ligne, nocolone + 1)
    Next
Next

Sheets("Ratio").Activate

For i = 0 To derniere_ligne
    If tab_bd2(i, 15) = Worksheets("Ratio").Range("A1") & Worksheets("Ratio").Range("A3") Then
    Worksheets("Ratio").Range(Left$(Cells(1, i + 2).Address(0, 0), (nocolonne < 27) + 2) & (i + 2)).Value = tab_bd2(0, i)
    End If
Next

End Sub

J'ai un soucis dans ma boucle If, car je ne sais pas quoi mettre quand le if est faux!!!

J'espère avoir été clair dans mes explications!!!!

Merci beaucoup et bonne soirée.

Bonjour

Ton fichier (anonymisé si besoin) ainsi que le résultat que tu souhaites obtenir faciliterait énormément la résolution de ton problème

bonjour

La question a se poser est si des personnes n'appartiennent pas a la bonne année et a la bonne BU que faut-il en faire ???

et là on pourra répondre à ta condition fausse de ton if....

si j'ai bien compris le code ....

il va y avoir des cellules B2 ou C2 ou ....*2 vides dans le cas ou des personnes n’appartiennent pas à la bonne année et la bonne BU

personnellement je modifierais le code de la manière suivante :

Sheets("Ratio").Activate
dim j as integer
j= 2
For i = 0 To derniere_ligne
    If tab_bd2(i, 15) = Worksheets("Ratio").Range("A1") & Worksheets("Ratio").Range("A3") Then
    Worksheets("Ratio").cells(2,j) =tab_bd2(0, i)
    j = j+1
End If
Next

a tester car sans fichier difficile de dire si cela va marcher

Fred

Bonjour,

Voici donc le fichier où j'ai enlever juste quelques données et modifié certaines données!!!

Merci encore de vous pencher sur mon fichier.

Bonne soirée

5forum.xlsm (24.66 Ko)

bon finalement c'est pas sur la ligne 2 mais la 3 et petite inversion ici

cells(2,j) =tab_bd2(0, i)

fallait mettre

cells(2,j) =tab_bd2(i, 0)

et 2/3 simplifications...

voir piece jointe a tester

fred

10schmill78-v001.xlsm (25.46 Ko)

juste une remarque

si la macro doit faire que cela ..... inutile de mettre toutes cellules ta feuille excel dans une variable tableau .....

fred

Bonjour Fred,

Merci pour la correction de la macro, il y a juste un soucis sur le "clearcontents" pour la formule, cela ne m'affiche pas les initiales!

J'ai donc remis la ligne en dure à savoir "Range("B3:X3").clearcontents" et cela fonctionne bien.

Juste une petite question, comment puis je faire pour ne pas avoir le bouton et cliquer dessus à chaque fois, mais que cela s'exécute à chaque fois que nous changeons les données en A1 et A3?

Pour te répondre, j'ai dans mon fichier original environ 2000 lignes, et je me suis dit qu'avec un tableau les calculs iraient beaucoup plus vite...sauf si je me trompe dans ce cas je veux bien que tu puisses me diriger vers une autre solution que les tableaux!

En tout cas merci beaucoup.

Bonne journée.

bonjour

oui après vérification il y avait bien un problème avec le clearcontents. modification de dernière minutes sans essais......

donc voici le code corrigé pour qu'il s'execute au changement de valeurs des deux cellules A1 et A3

fred


re

voici la version sans mise en tableau de ta feuille base....

a toi de voir si cela prend plus ou moins de temps avec tes 2000 lignes ....

fred

Re bonjour Fred,

Merci beaucoup pour les modifications.

Tout est impec pour moi et je vais tester les deux fichiers pour comparer le temps!!!

Merci encore.

Bon WE à toi!

Rechercher des sujets similaires à "probleme boucle"