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
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