Erreur VBA je ne trouve pas

Problème

Lorsque je crée ma première feuille AD

je vous laisse voir par vous même en appuyant sur le bouton "Création Feuille" sur la fenêtre Saisie AD

en bas vous verrez apparaitre D(2) hors cela devrait D3 (avec appel de feuille modèle "D" )

dans ma macro cela doit être D3 comme le nom de la Cellule B11

le problème est qu'il appelle la feuille 16 "Zite", qu'il complète cette feuille,

me renomme cette feuille de "base" (qui normalement est la feuille de "Base" de la fenêtre Saisie A Z.ITE) ne devrait pas disparaitre et surtout ne devrait pas être utiliser en cliquant sur Création Feuille de cette feuille car associer à ce bouton la macro Annulation DT seulement

je ne comprend pas, j'ai le sentiment que mes macros sont correcte,

il y a d'autre erreur mais celle ci je souhaiterai la régler rapidement

Merci de votre aide

18projet-3.xlsm (149.01 Ko)

Bonjour,

Étrangement, Excel écrit toujours dans la Feuil16(Zite) .

J'ai trouvé une façon de corriger ce souci.

Je lis les 2 derniers caractères du CodeName de la feuille ajoutée, c'est donc bon de 10 à 99.

Si 99 n'est pas suffisant, il faudra revoir la chose.

Il y a sûrement une meilleure façon de coder cela, mais les pros de la photo ne sont pas passés par ici et les autres semblent s'y être cassé les dents. (12 téléchargements)

Si ce code te convient, il faudra modifier les autres macros qui posent le même problème.

Un essai ...

Sub Annulation_DT()
Dim D_Lig As Long
Dim Ws1 As Worksheet
Dim WsName As String

    Application.ScreenUpdating = False

    With Worksheets("Saisie AD")
        D_Lig = .Range("A" & Rows.Count).End(xlUp).Row
        If .Range("E" & D_Lig).Value = "" Then
            Worksheets("D").Visible = -1
            Worksheets("D").Copy After:=Sheets(Worksheets.Count)
            Worksheets("D").Visible = 2

            For Each Ws1 In ThisWorkbook.Worksheets
                If Right(Ws1.CodeName, 2) = Worksheets.Count Then
                    Ws1.Name = .Cells(D_Lig, 2).Value
                    WsName = .Cells(D_Lig, 2).Value
                    Exit For
                End If
            Next Ws1
            Worksheets(WsName).Range("AA2").Value = .Cells(8, 4).Value                    'Nom de chantier
            Worksheets(WsName).Range("D2").Value = .Cells(D_Lig, 1).Value               'FT
            Worksheets(WsName).Range("T4").Value = .Cells(D_Lig, 2).Value               'Nom
            Worksheets(WsName).Range("K2").Value = .Cells(D_Lig, 3).Value               'Voie
            Worksheets(WsName).Range("K8").Value = .Cells(D_Lig, 4).Value               'Observation
            .Range("E" & D_Lig).Value = "Créée"
            Worksheets("Saisie AD").Activate
        End If
    End With
End Sub

ric

Bonjour,

Je viens de comprendre le souci.

Feuil16(Zite) est la dernière feuille ... la plus à droite des feuilles ... même si son CodeName pourrait être moins élevé et quelle est masquée.

Sheets("D").Copy After:=Sheets(Worksheets.Count) ajoute la feuille en dernière position des feuilles visibles. Il semble y avoir une contradiction.

J'avoue ne pas tout bien comprendre et feu MFERRAND le volubile n'est plus pour les explications exhaustives et limpides que j'appréciais.

ric

Bonjour

et merci Ric

je viens de voir le comment sa ce fait

j'ai simplifier le programme

lorsque la dernière feuille est visible le programme fonctionne correctement. (la la feuille K1)

Quelque soit la feuille générè.

par contre quand je masque la feuille 15 sa ne fonctionne plus

ex je veux D12 dans la feuille Saisie AD en nom je tape D12

après avoir complété ma ligne, j appuie sur mon bouton CR AD

et la voici ce qui ce passe il prend la feuille K1 qu il nomme D12 il y insert les valeurs des cellules

et ensuite me sort la bonne feuille modèle AD en me disant que cette feuille existe déjà normal il vient de me la renommer

en copie j'ai joint le même fichier

la seule différence est que la dernière feuille est invisible sur l un et visible sur l autre

Bonjour,

Je constate que ma proposition d'utiliser la boucle For Each Ws1 In ThisWorkbook.Worksheets ne te plait pas ou apporte d'autres contraintes que j'ignore.

J'aurai bien aimé le savoir.

Mes connaissances VBA sont limitées.

Je vais regarder ce que je peux faire.

J'ai peu d'espoir.

ric

Bonjour,

Seule la feuille "Saisie AS" fonctionne, je tiens compte du type en colonne C.

Je reviens dès que j'ai de l'avancement dans les autres feuilles.

ric

Bonjour,

Tout devrait être bon.

Bien évidemment, je compte sur toi pour effectuer des tests de validation afin de t'assurer que le code te convient.

A+

ric

Bonsoir,

Regardez ce qui se passe quand vous avez plusieurs feuilles dans un classeur au moins deux :

Sélectionnez la feuille 1, puis cliquez sur le "+" à droite des onglets.

Une feuille est ajoutée, mais elle se trouve entre la feuille 1 et la feuille 2, malgré tout il y a bien 3 feuille dans le classeur.

Du coup si vous écrivez sur la feuille Worksheet.count, vous allez écrire sur le feuille 2 au lieu de la trois !

Pour corriger ceci, il suffit de savoir que lors de l'ajout d'une feuille, celle-ci est automatiquement sélectionnée (activée) comme vous avez pu le voir lors di test ci dessus, donc votre code pour qu'il fonctionne doit être modifié comme ceci :

Sub Annulation_DT()

    Application.ScreenUpdating = False

    Dim D_Lig As Long

    With Sheets("Saisie AD")
        D_Lig = .Range("A" & Rows.Count).End(xlUp).Row
        If .Range("E" & D_Lig).Value = "" Then
            Sheets("D").Visible = -1
            Sheets("D").Copy After:=Sheets(Worksheets.Count)
            Sheets("D").Visible = 2

            ActiveSheet.Range("AA2").Value = .Cells(8, 4).Value                    'Nom de chantier
            ActiveSheet.Range("D2").Value = .Cells(D_Lig, 1).Value               'FT
            ActiveSheet.Range("T4").Value = .Cells(D_Lig, 2).Value               'Nom
            ActiveSheet.Range("K2").Value = .Cells(D_Lig, 3).Value               'Voie
            ActiveSheet.Range("K8").Value = .Cells(D_Lig, 4).Value               'Observation
            ActiveSheet.Name = .Cells(D_Lig, 2).Value
            .Range("E" & D_Lig).Value = "Créée"
            Sheets("Saisie AD").Activate
        End If
    End With
End Sub

C'est à dire on prend comme info la feuille active plutôt que le nombre de feuille du classeur.

@ bientôt

LouReeD

Nota : Merci ric pour ce petit clin d'œil au Maréchal !

Merci Messieurs

Ric et Loureed

j'avais trouvé une autre solution mais peut être par chance

j'avais rajouter un onglet vierge à la suite de mes onglets (visible)

et j'ai fait plein de test et je n'avais plus rencontrer ce problème

Encore une fois un grand merci à vous 2

Rechercher des sujets similaires à "erreur vba trouve pas"