Boucles erreur avec Vlookup et mid ?

Bonjour,

Quand j'introduit un nom, le numéro de matricule(11chiffres) qui se trouve sur la troisième colonne de la table(profs), doit s'indiquer , 1 chiffre dans chaque case avec un pas de deux...

actuellement j'obtiens le dernier chiffre du matricule dans chaque case....

Pouvez-vous m'aider.... je sais le faire en formule avec stxt.... mais j'aimerais la formule en vba....

Voila mon essais :

If .Range("G10").Value <> "" Then For i = 5 To 25 Step 2 For j = 1 To 11 .Cells(7, i).Value = WorksheetFunction.VLookup(.Range("G10").Value, Sheets("Profs").Range("A1:E43"), 3, False) .Cells(7, i).Value = Mid(.Cells(7, i), j, 1) Next j, i Else For i = 5 To 25 Step 2 .Cells(7, i) = "" Next i End If

Merci d'avance

Oli

Bonjour,

tu n'as aucune raison de fusionner tes cellules 2 à 2, ça complique tout inutilement.

Refait ta feuille en les supprimant et en élargissant tes colonnes.

Tout sera beaucoup plus simple pour toi ensuite

Dans ta boucle, pourquoi mettre :

.Cells(7, i).Value = WorksheetFunction.VLookup(.Range("G10").Value, Sheets("Profs").Range("A1:E43"), 3, False)

pour l'écraser tout de suite après avec :

.Cells(7, i).Value = Mid(.Cells(7, i), j, 1)

??

Lis une seule fois ton n° de matricule que tu mets dans une variable. Ensuite travaille avec cette variable.

Worksheet_SelectionChange se déclenche à chaque sélection.

Pas sûr du tout que ce soit l'événement approprié...

Change sans doute

eric

re,

j'ai essayé ceci....ca fonctionne toujours pas

mat = WorksheetFunction.VLookup(.Range("G10").Value, Sheets("Profs").Range("A1:E43"), 3, False) For i = 5 To 25 Step 2 For j = 1 To 11 .Cells(7, i).Value = Mid(mat, j, 1) Next j Next i

Step 2 !!!!

Désolé mais si tu t'obstines et ne veux pas appliquer les conseils tu attends quelqu'un d'autre.

Je ne travaille pas sur des feuilles mal fichues si on peut mieux faire, c'est contre ma religion.

eric

re,

Je vais appliquer tes conseils et recommencer ma feuille à zéro...

Merci

Pas besoin de reprendre à 0.

Tu sélectionnes la 2nde colonne et tu la supprimes. Et tu recommences.

Ensuite plus qu'à reprendre tes largeurs.

eric

re,

voila, c'est fait(colonnes),et j'ai retiré le step de ma boucle mais j'ai toujours le même problèmes...

If .Range("f10").Value <> "" Then mat = WorksheetFunction.VLookup(.Range("f10").Value, Sheets("Profs").Range("A1:F43"), 3, False) For i = 5 To 16 For j = 1 To 11 .Cells(7, i).Value = Mid(mat, j, 1) Next j, i Else For i = 5 To 15 .Cells(7, i) = "" Next i End If

Maintenant mon matricule va de E7:O7

j'ai toujours le dernier chiffre dans toutes les case

Bonjour,

Comme te le conseille fortement Eric , évites les fusions de cellules !

Voici le code retouché :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Plg As Range
    Dim mat As Integer
    Dim i As Integer
    Dim j As Integer
    Dim Valeur

    Set Plg = Sheets("Profs").Range("A1:F43")

    With Sheets("A12")

        If .Range("G10").Value <> "" Then

            .Range("J12").Value = WorksheetFunction.VLookup(.Range("G10").Value, Plg, 2, False)
            .Range("B16").Value = WorksheetFunction.VLookup(.Range("G10").Value, Plg, 4, False)
            .Range("AL7").Value = WorksheetFunction.VLookup(.Range("G10").Value, Plg, 6, False)

            Valeur = WorksheetFunction.VLookup(.Range("G10").Value, Plg, 5, False)

            If Valeur = .Range("X18") Then .Range("Y18") = "X" Else .Range("Y18") = ""
            If Valeur = .Range("X15") Then .Range("Y15") = "X" Else .Range("Y15") = ""
            If Valeur = .Range("X21") Then .Range("Y21") = "X" Else .Range("Y21") = ""

            Valeur = WorksheetFunction.VLookup(.Range("G10").Value, Plg, 3, False)

            For j = 1 To Len(Valeur): .Cells(7, j + 6).Value = Mid(Valeur, j, 1): Next j

        Else

            .Range("j12") = ""
            .Range("B16") = ""
            .Range("AL7") = ""

            .Range(.Cells(7, 7), .Cells(7, 17)).ClearContents

        End If

    End With

End Sub

et ton classeur :

Bonjour à tous,

@eriiic : je suivrai dorénavant tes conseils à la lettre, je fais toujours compliquer au lieu de me simplifier la vie....merci de m'avoir appris quelque chose....

@Theze : merci pour ton code, au niveau de la rédaction, il est beaucoup plus simple que le mien, je dois essayer de plus travailler avec des variables et ordonner plus mes tableaux....

Encore merci à vous deux pour votre aide.et de votre temps...j'apprends et c'est le but de ce forum...

Oli

Bonsoir Theze,

J'ai la suite...ici j'indique une date et une croix se met a coté du jour correspondant...mon code fonctionne mais a mon avis doit-être retoucher.....

Merci

Oli

71dates.xlsm (16.07 Ko)

Re,

relis ce que je te disais au sujet Worksheet_SelectionChange de à la fin du post de 18:52 que tu confonds allègrement avec Worksheet_Change.

Private Sub Worksheet_Change(ByVal Target As Range)
    'Worksheet_SelectionChange : non !
    Dim dat As Date
    If Intersect(Target, [C2:E2]) Is Nothing Then Exit Sub ' si la modif n'est pas une de ces cellule on sort
    dat = DateSerial(Cells(2, 5).Value, Cells(2, 4).Value, Cells(2, 3).Value)    'date
    Application.EnableEvents = False
    Range("G3,J3,M3,P3,S3,V3,Y3").Value = "" ' nettoyage
    Cells(3, 4 + Weekday(dat, vbMonday) * 3) = "X" ' colonne= jour sem * 3 + 4
    Cells(86, 5).Value = Date
    Application.EnableEvents = True
End Sub

eric

Bonjour eriiic,

J'ai refait tous mes documents, sans fusion de cellules et j'en avais quelqu'un...c'est vrai que c'est beaucoup plus facile pour adapter le code...j'ai pu l'adapter pour chaque fichiers sans problèmes...

Je te remercie encore pour tes précieux conseils et le temps consacré pour mes erreurs...

Je clôture ici le poste....

Rechercher des sujets similaires à "boucles erreur vlookup mid"