Saut de feuille suite enregistrement macro

Bonjour ,

J'ai créé un tableau formulaire avec une macro ( bouton enregistré ) celui ci est dans l'onglet feuille 1 .

Toutes les info saisies dans ce formulaire est enregistré directement dans un tableau dans l'onglet feuille 2 .

Mon problème c'est quand j'appuie sur le bouton enregistré ma feuille 1 saute pour enregistré les infos sur la page 2 .

J'aimerais que lors de l'enregistrement que les feuilles ne sautent pas .

Je ne sais pas si mes explications sont claires , en pj le document .

Merci par avance pour vos lumières .

bonjour leilou97354,

il faut éviter tous ces "select", utiliser des variables et même apprendre à utiliser la construction "With xyz .... End with. Dès qu'on voit un point comme préfix, il faut chercher le "With ..." précédent et l'ajouter virtuellement en face de ce point. (https://excelmacrohub.com/how-to-use-end-with-excel-vba-complete-guide/)

Votre Code simplifié (pas testé)

Sub formulaire()
     '
     ' formulaire Macro
     '

     '
     Dim shM As Worksheet, shF As Worksheet  'déclarer 2 variables qu'on utilisera

     Set shM = Sheets("MATERIELS ")          'attention avec cet espace supplémentair ???
     Set shF = Sheets("formulaire")
     With shM 'le variable pour la feuille "materiels " 
          .Rows("18:18").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
          .Range("E18,G18").NumberFormat = "m/d/yyyy"

          .Range("A18").Value2 = shF.Range("C5").Value2
          .Range("B18").Value2 = shF.Range("C9").Value2
          .Range("C18").Value2 = shF.Range("C7").Value2
          '...
     End With
End Sub

Bonjour BSalv ,

Merci de ton retour .

J' ai essayé de comprendre le code transmis mais je n'y arrive pas et je n'arrive pas à le faire fonctionner :(

c'est mieux que j'explique la 2ième ligne en 3 étapes, parce que là, on fait plusieurs choses en même temps. Il faut savoir qu'un tableau structuré est un objet assez pratique et facile à manipuler dès qu'on comprend sa fonctionnement. Il faut presque le considérer à être indépendant de sa feuille ! Donc, dans un module normal, on ne doit pas mentionner la feuille, excel le sait. 

Range("tableau1").ListObject = ce tableau structuré de la feuille "materiels " (pas nécessaire de mentionner la feuille)
Range("tableau1").ListObject.ListRows.Add(1) = l'action d'ajouter une nouvelle ligne 1 (!) au tableau, donc c'est carrément insérer une ligne à la ligne 1 .Range
Range("tableau1").ListObject.ListRows.Add(1).Range = le résultat de cette action = la plage de cette nouvelle ligne
".Cells(1, 1)" >>> avec le préfix ".", il faut chercher le "with" précédent, c'est ce fameux "With Range("tableau1").ListObject.ListRows.Add(1).Range", donc .cells(1,1) est la cellule de la première ligne (il n'y a qu'une) et première colonne de la nouvelle ligne ajoutée,donc ici A18 de la feuille "materiels ". On veut l'écraser avec la valeur de la cellule "C5" de la feuille "formulaire", donc on utilise "shF.Range("C5").Value2" avec shF comme abbreviation de la feuille "formulaire". Vous voyez, il n'y a aucun "select" jusqu'à présent, donc on n'a pas changé de feuille ou de cellule. Le "value2" n'a pas d'importance pour le moment car "Type materiel" est un string (texte). "Value2" a son importance pour des valeurs type date, monétaire, ... (colonnes 5 et 7). Une date est le nombre de jours depuis 1 janvier 1900 et "value2" d'une date traduit par exemple 10/9/2025 en 45910, une valeur qu'excel sait traiter et nous ajoutons un format "jj/mm/aa" pour comprendre que cette valeur est une date. 

C'est peut-être trop en une fois pour tout comprendre, mais faites-le en étapes ... 

Il y a une chose à éviter avec des tableaux structurés, ce sont des lignes vides, elles ne servent à rien et elles sont ambetantes !!! Autrement, on donne un format aux colonnes et si on ajoute des lignes, ses nouvelles cellules recevont directement le bon format.

Sub formulaire()

     Dim shF   As Worksheet: Set shF = Sheets("formulaire")     'on réfère à cette feuille

     With Range("tableau1").ListObject.ListRows.Add(1).Range     'la plage de la nouvelle ligne insérée au tableau "tableau1"
          .Cells(1, 1).Value2 = shF.Range("C5").Value2     'première cellule est le type de matériel
          .Cells(1, 2).Value2 = shF.Range("C9").Value2     '2ième=marque
          .Cells(1, 3).Value2 = shF.Range("C7").Value2     '3ième=désignation
          .Cells(1, 4).Value2 = shF.Range("C11").Value2     '4ième=N° série
          .Cells(1, 5).Value2 = shF.Range("E5").Value2     '5ième=date achat (en valeur double !!!)
          .Cells(1, 6).Value2 = shF.Range("E7").Value2     '6ième=quantité
          .Cells(1, 7).Value2 = shF.Range("C13").Value2     '7ième=date entretien (en valeur double !!!)
          .Cells(1, 8).Value2 = shF.Range("C15").Value2     '8ième=descriptif entretien
          'il n'y a pas un 9ième à assigner !!!
          .Cells(1, 10).Value2 = shF.Range("E8").Value2     '10ième=localisation
          'il n'y a pas un 11ième à assigner !!!
     End With

     With shF
          .Range("C5,C7,C9,C11,C13,C15,E5,E7,E9").ClearContents     'RAZ ces cellules
          Application.Goto .Range("C5")     'activer cette cellule
     End With

End Sub

Bonsoir ,

Désolé de ma réponse tardive .

Merci beaucoup pour les explications.

Rechercher des sujets similaires à "saut feuille suite enregistrement macro"