[ resolu] VBA - Cherche le minimum dans même colonne sur plusieurs onglets

cissou69

XLDnaute Junior
Bonjour,

Je ne sais pas si mon titre est clair mais bon...
L'idée est de rechercher parmi tous les onglets la valeur minimale disponible dans une incrémentation (sachant que cette incrémentation n'a pas été continue dans le temps). La zone de recherche est toujours identique quelque soit l'onglet...
J'ai voulu coder ceci :
Code:
Sub Mini()

Max_Num = 1
Dim s As Worksheet

For Each s In Worksheets
i = 10
    While Not s.Cells(i, 1).Value = ""
        If s.Cells(i + 5, 1).Value - s.Cells(i, 1).Value <> 1 Then
            Max_Num = s.Cells(i, 1).Value
        End If
    i = i + 5
    Wend
Next s

Numero.Value = Max_Num + 1

MsgBox "Le mini dispo est" + Numero.Value

End Sub

Mais ça ne fonctionne pas...

Ci-joint un fichier exemple,

Merci de votre aide,
 

Pièces jointes

  • n°tache.xls
    45 KB · Affichages: 71
  • n°tache.xls
    45 KB · Affichages: 72
  • n°tache.xls
    45 KB · Affichages: 72
Dernière édition:

suistrop

XLDnaute Impliqué
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Salut,

j ai modifié juste la fin pour que ca ne bug plus.
Par contre j'ai pas cherché a comprendre ce que tu cherches à faire :)
Code:
Sub Mini()
Max_Num = 1
Dim s As Worksheet
For Each s In Worksheets
i = 10
    While Not s.Cells(i, 1).Value = ""
        If s.Cells(i + 5, 1).Value - s.Cells(i, 1).Value <> 1 Then
            Max_Num = s.Cells(i, 1).Value
        End If
    i = i + 5
    Wend
Next s
Numero = Max_Num + 1
MsgBox "Le mini dispo est " & Numero
End Sub

Suistrop
 

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Effectivement, ça ne bug mais le numéro affichée affichée est le 37 (nombre le plus grand +1) alors que le numéro 4 est disponible...
Dites-moi si vous avez besoin de plus d'explication ?!

Merci d'avance,
 

suistrop

XLDnaute Impliqué
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Salut,

Regarde avec ce code :

Code:
Sub Mini()
Max_Num = 9 ^ 9
Dim s As Worksheet
For Each s In Worksheets
i = 10
    While Not s.Cells(i, 1) = ""
        If s.Cells(i + 5, 1) - s.Cells(i, 1).Value <> 1 And s.Cells(i + 1, 1) <= Max_Num + 1 Then
            Max_Num = s.Cells(i, 1)
        End If
    i = i + 5
    Wend
Next s
Numero = Max_Num + 1
MsgBox "Le mini dispo est " & Numero
End Sub
 

Pièces jointes

  • soucis69.xls
    41.5 KB · Affichages: 70

JNP

XLDnaute Barbatruc
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Bonjour le fil :),
Une proposition différente
Code:
Sub MinN°()
Dim Feuille As Worksheet, Cellule As Range, Résultat As Integer, Drapeau As Boolean
Résultat = 1
Do
Résultat = Résultat + 1
Drapeau = False
For Each Feuille In ThisWorkbook.Worksheets
Set Cellule = Feuille.Columns(1).Find(Résultat, , , xlWhole)
If Not Cellule Is Nothing Then Drapeau = True
Next
Loop While Drapeau = True
MsgBox Résultat
End Sub
Bonne journée :cool:
 

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Re,

Suistrop, ta macro focntionne très bien, je vais essayer de l'intégrer dans une autre et je reviens pour donner le résultat.

JNP, ta macro ne fonctionne pas quand je la lance la première fois,il se créé d'abord un second module vide. Puis lors d'un second run, elle fonctionne... un peu déroutant pour un novice ;) Tu aurais des explications sur ton code stp ?

Merci de votre aide,
 
Dernière édition:

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

De retour,
Dans le fichier originel, je me rends compte qu'un onglet est gênant.
est-il possible via la fonction Exit For de quitter la boucle quand s prend la valeur de cet onglet ?

De plus, quand je compile le code de suistrop dans la macro d'origine j'ai un mismatch sur l'expression
Code:
Numéro.Value = Max_Num +1

Merci,
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Re :),
JNP, ta macro ne fonctionne pas quand je la lance la première fois,il se créé d'abord un second module vide. Puis lors d'un second run, elle fonctionne... un peu déroutant pour un novice ;) Tu aurais des explications sur ton code stp ?
Euh, à part si tu as fumé de la moquette, je ne vois pas, en aucun cas ma macro ne peut créer un nouveau module :p...
Voici le code commenté :
VB:
Sub MinN°()
Dim Feuille As Worksheet, Cellule As Range, Résultat As Integer, Drapeau As Boolean
' Déclare une variable Onglet, une variable Cellule, un compteur entier et un indicateur booléen
Résultat = 0
' Initialise le compteur
Do
' Lance la boucle
Résultat = Résultat + 1
' Incrémente le compteur
Drapeau = False
' Initialise l'indicateur à Faux
For Each Feuille In ThisWorkbook.Worksheets
' Pour chaque onglet de ce classeur
If Feuille.Name <> "Base" Then
' Ajout : pour ne pas tenir compte de l'onglet Base à adapter à ton cas
Set Cellule = Feuille.Columns(1).Find(Résultat, , , xlWhole)
' Cellule est le fruit de la recherche du compteur dans la colonne 1 (A)
If Not Cellule Is Nothing Then Drapeau = True
' Si le compteur a été trouvé, l'indicateur passe à Vrai
End If
' Fin du test si Onglet Base
Next Feuille
' Onglet suivant
Loop While Drapeau = True
' Continuer la boucle tant que l'indicateur est à Vrai
' Il sera Faux quand aucun des onglets n'aura le compteur dans la colonne 1
MsgBox Résultat
' Afficher la valeur manquante
End Sub
Ton fichier en PJ.
Bon courage :cool:
 

Pièces jointes

  • n°tache(1).xls
    54 KB · Affichages: 51

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Merci pour ces explications...
Mais je te promets qu'un second module s'est créé avec juste le Sub MinN°() ... End Sub.
Bon c'est pas très grave, merci pour ces explications !!

Bonne journée,
 

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Bonjour,

Je me permet de faire un up car je me suis aperçu d'un autre problème.
Le code est la suivant :
Code:
Sub Mini_ts()
Max_Num = 9 ^ 9
Dim s As Worksheet
For Each s In Worksheets
i = 10
    While Not s.Cells(i, 1) = ""
        If s.Cells(i + 5, 1) - s.Cells(i, 1).Value <> 1 And s.Cells(i + 1, 1) <= Max_Num + 1 Then
            Max_Num = s.Cells(i, 1)
        End If
    i = i + 5
    Wend
   Next s
Numero = Max_Num + 1
MsgBox "Le mini dispo est " & Numero
End Sub

Le s.Name fonctionne très bien pour sélectionner les onglets.
Mais je me suis rendu compte d'un cas particulier (voir fichier joint).
Le mini dispo affiché est 3 alors que l'onglet Dpt 1 contient la tache 3.
Je pense qu'il ne garde pas en mémoire le Max_Num le plus petit.
En fait faudrait lui faire vérifier Max_Num mais je ne vois pas comment faire.

Merci de votre aide,
 

Pièces jointes

  • n°tache.xls
    47 KB · Affichages: 56
  • n°tache.xls
    47 KB · Affichages: 56
  • n°tache.xls
    47 KB · Affichages: 53

suistrop

XLDnaute Impliqué
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Salut,

En effet mon code était un peu light ...
Ci dessous un code avec utilisation d'un tableau il faut changer le 100 dans tab_test si le nombre de tache peut etre supérieur.

Code:
Sub Mini_ts()
Dim tab_test(100) As Boolean
Dim s As Worksheet
For Each s In Worksheets
i = 10
    While Not s.Cells(i, 1) = ""
        tab_test(s.Cells(i, 1)) = True
    i = i + 5
    Wend
Next s
For z = 1 To UBound(tab_test)
    If tab_test(z) = False Then
        Numero = z
        Exit For
    End If
Next z
MsgBox "Le mini dispo est " & Numero
End Sub
 

cissou69

XLDnaute Junior
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Merci suistrop,
le résultat est bien le bon cependant peut être tu peux m'aider.
quand j'écris ceci :
Code:
Private Sub UserForm_Initialize()
Dim tab_test(2000) As Boolean
Dim s As Worksheet
For Each s In Worksheets
    i = 10
    If Not s.Name = "Feuil11" Or s.Name = "Feuil5" Then
        While Not s.Cells(i, 1) = ""
            tab_test(s.Cells(i, 1)) = True
        i = i + 5
        Wend
    End If
Next s
For z = 1 To UBound(tab_test)
    If tab_test(z) = False Then
        dispo = z
        Exit For
    End If
Next z

mon mismatch vient du fait qu'il me fait quand même la boucle s sur les 11 feuilles ...
J'ai aussi essayé avec

Code:
Private Sub UserForm_Initialize()
Dim tab_test(2000) As Boolean
Dim s As Worksheet
For Each s In Worksheets
    i = 10
    If s.Name <> "Feuil11" Or s.Name <> "Feuil5" Then
        While Not s.Cells(i, 1) = ""
            tab_test(s.Cells(i, 1)) = True
        i = i + 5
        Wend
    End If
Next s
For z = 1 To UBound(tab_test)
    If tab_test(z) = False Then
        dispo = z
        Exit For
    End If
Next z

Sans plus de succès :s
Merci d'avance,
 

JNP

XLDnaute Barbatruc
Re : VBA - Cherche le minimum dans même colonne sur plusieurs onglets

Re :),
En écrivant
Code:
If s.Name <> "Feuil11" Or s.Name <> "Feuil5" Then
tu décris forcément toutes les feuilles : cas Feuil1 : s.Name est bien différent de Feuil5, et vice et versa :p...
C'est donc
Code:
If s.Name <> "Feuil11" And s.Name <> "Feuil5" Then
qu'il faut écrire :rolleyes:...
Bon courage :cool:
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 048
dernier inscrit
Noni