IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Maplage.find() ne trouve rien [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut Maplage.find() ne trouve rien
    Bonjour,
    J'ai une feuille avec un certain nombre de tableaux.
    Dans ces tableaux figurent des informations qui sont remplies semaine par semaine.
    Chaque tableau a une semaine de départ différente.
    Chaque tableau a une semaine de fin différente.

    Je souhaiterai faire un tableau général qui reprenne l'ensemble de ces petits tableaux et qui soit rempli semaine par semaine.

    J'ai déjà ecrit pas mal de choses: ma macro trouve quelle sera la semaine de départ du tableau général, aussi la semaine de fin.

    J'essai ensuite de parcourir les lignes semaines des petits tableaux et d'utiliser la fonction Find dans le tableau général pour trouver la semaine corespondant et ainsi remplir la bonne case.
    En gros quand je parcours les petits tableaux, je regarde la 1ère semaine, je cherche le même numero de semaine dans le tableau général et je vais remplir la case en dessous.

    Seulement Find ne me trouve rien alors qu'en faisant le pas à pas, il a les bonnes données d'entrée: Il cherche dans la bonne plage, il cherche la bonne info.

    Voici ce que j'écris pour Find:
    En rouge la ligne qui renvoie systématiquement Nothing

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set trouve = plsemainetot.Find(Cells(i, k).Value, plsemainetot.Cells(1), xlValues, xlWhole, xlByRows, xlNext)
    plsemainetot est une plage qui comprend les numeros de semaine du tableau général.

    Cells(i,K).value est le numero de semaine du petit tableau qui est parcouru.

    Voici le code général:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Sub total()
    Dim derligne As Integer, ntache As Integer, i As Integer, j As Integer, k As Integer
    Dim trouve As Range
    Dim plsemainetot As Range
    Dim objectif As Variant
    Dim plsemaines As Range
    Dim coldroite As Integer
    Dim lsemaine As Range
    Dim Nbcolonnes As Integer, Min As Integer, Max As Integer, SMax As Integer, SMin As Integer
    Dim col As Integer
    
    
    derligne = Range("A65536").End(xlUp).Row
    ntache = 0
    SMax = 0
    SMin = 52
    
    For i = derligne To 1 Step -1
    If Cells(i, 1).Interior.ColorIndex = 37 Then
    objectif = objectif + Cells(i, 1).Value
    End If
    If Cells(i, 1).Value = "Semaine" Then
    coldroite = Cells(i, 100).End(xlToLeft).Column
    Set plsemaines = Range(Cells(i, 2), Cells(i, coldroite))
    Min = WorksheetFunction.Min(plsemaines)
    Max = WorksheetFunction.Max(plsemaines)
    If Min < SMin Then SMin = Min
    If Max > SMax Then SMax = Max
    End If
    Next i
    
    Nbcolonnes = SMax - SMin + 1
    
    With Cells(derligne + 2, 1)
    .Value = objectif
    .Interior.ColorIndex = 37
    End With
    With Range(Cells(derligne + 2, 2), Cells(derligne + 2, Nbcolonnes + 3))
    .Merge
    .Value = "TOTAL"
    .Interior.ColorIndex = 36
    End With
    
    Cells(derligne + 3, 1).Value = "Semaine"
    Cells(derligne + 4, 1).Value = "Réalisé"
    Cells(derligne + 5, 1).Value = "Cumul Réalisé"
    Cells(derligne + 6, 1).Value = "RAF"
    Cells(derligne + 7, 1).Value = "% Réalisé"
    Cells(derligne + 8, 1).Value = "% Chiffrage"
    Cells(derligne + 4, 2).Value = 0
    Cells(derligne + 5, 2).Value = 0
    Cells(derligne + 6, 2).Value = objectif
    Cells(derligne + 7, 2).Value = 0
    Cells(derligne + 8, 2).Value = 0
    
    For j = 0 To Nbcolonnes - 1
    Cells(derligne + 3, j + 3).Value = SMin + j
    Next j
    
    Set plsemainetot = Range(Cells(derligne + 3, 2), Cells(derligne + 3, Nbcolonnes + 3))
    For i = derligne To 1 Step -1
    
    If Cells(i, 1).Value = "Semaine" Then
    For k = 3 To Cells(i, 100).End(xlToLeft).Column
    Set trouve = plsemainetot.Find(Cells(i, k).Value, plsemainetot.Cells(1), xlValues, xlWhole, xlByRows, xlNext)If trouve Is Nothing Then
    GoTo suite
    Else
    col = trouve.Column
    End If
    Cells(derligne + 4, col).Value = Cells(i + 1, k).Value + Cells(derligne + 4, col).Value
    suite:
    Next k
    End If
    
    Next i
    
    With Range(Cells(derligne + 2, 1), Cells(derligne + 8, Nbcolonnes + 3))
            .Borders.LineStyle = xlContinuous
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlInsideHorizontal).Weight = xlThin
            .Borders(xlInsideVertical).Weight = xlThin
    End With
    
    End Sub
    Mon post est un peu long mais j'ai essayé de donner le maximum d'infos sur mon problème.

    Merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Vérifie ce que tu as dans plsemainetot, ici
    Set plsemainetot = Range(Cells(derligne + 3, 2), Cells(derligne + 3, Nbcolonnes + 3))
    Pour tester, sur la ligne du dessous, place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox plsemainetot.address
    Tu risques d'être surpris

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Il me donne B106,AF106 ce qui corespond bien.

    La première cellule de cette plage est vide cela pose t'il un problème?

    j'ai fait la meme chose pour voir si cells(i,k) corespond bien à ce que je veux et la répose est oui.
    De même j'ai fait

    et j'ai bien ce qu'il faut

    Mystere

    je suis près à envoyer le fichier si il le faut

    J'ai contourné le problème en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim c as range
     
    For each c in plsemainetot.range
    if c.value=cells(i,k).value then
    l=c.row
    cl=c.column
    cells(l+1,cl).value=cells(l+1,cl).value+cells(i+1,k).value
    end if
    next c
    Ca fonctionne mais j'aurai bien aimé faire marcher le Find (je sais je suis un peu chiant)

    Le fait de récupérer le n° de ligne et de colonne de c de cette manière ne me plait pas mais je ne sais pas comment faire autrement.
    Y a t'il une solution plus simple.

    Je laisse ce topic sur non résolu car j'aimerai tout de même faire marcher ce Find.

    Merci

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Tu n'aurais pas des cellules fusionnées?

    Sinon poste le fichier.

    ++
    Minick

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plsemainetot = Range(Cells(derligne + 3, 2), Cells(derligne + 3, Nbcolonnes + 3))
    ????????
    Tu initialise ta plage 3 lignes plus bas que ta dernière ligne qui contient des données !!! Comment veux-tu y trouver quelque chose ?
    Tu faiis une boucle pour remonter mais ta plage n'est pas modifiée.
    De plus ton code me semble drôlement tarabiscoter !!
    A+

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Tarabiscoté je te l'accorde.

    Sinon derligne est la dernière ligne avant que j'ajoute le tableau total.
    Donc je cherche la derligne, je met en place le tableau total, ensuite je rempli les n° de semaines en ligne et enfin je parcours mes tableaux pour remplir la ligne réalisé qui se trouve sous la ligne semaine (dans le tableau tot)

    je met le fichier:
    il y d'autre choses dedans mais c'est la macro total dont on parle ici

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Sinon la plage n'est pas à modifier puisque c'est la plage qui contient les n° de semaine du tableau total et il faut ranger les infos trouvées dans les tableaux au dessus dans les cases du n° de semaine corespondant.

    Genre petit tableau, semaine 20 on a fait 20h, la macro cherche semaine 20 dans le tableau Total et rempli la case juste en dessous. Si il y a déja une valeur dans la case en dessous on ajoute donc je fais:
    case.value=case.value+ les 20h trouvées
    et ainsi de suite jusqu'à ce qu'on ai parcouru tous les tableaux.

    Je sais pas si c'est plus clair comme ça.

    Merci de vous y interresser en tout cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transaction XML, find ne trouve pas la balise joueur
    Par kekelg2006 dans le forum jQuery
    Réponses: 8
    Dernier message: 04/06/2011, 19h54
  2. [Toutes versions] Gérer quand ".find" ne trouve pas
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/06/2010, 20h23
  3. Explorateur de fichiers qui ne trouve rien
    Par ymoreau dans le forum Windows 7
    Réponses: 4
    Dernier message: 25/03/2010, 15h21
  4. [LigneDeCommande]find ne trouve pas mon fichier
    Par verbose dans le forum Linux
    Réponses: 6
    Dernier message: 17/03/2010, 09h44
  5. [Impression, états]Je ne trouve rien
    Par Jean_Benoit dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/05/2006, 06h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo