Erreurs - Valeurs identiques sur toutes les lignes

Bonjour,

J’ai fait un système de formulaire sans utiliser « USERFORM ».

Voici les feuilles misent en places (toutes dans le même classeur):

  • Formulaire
  • Transport
  • Infos patients-clients
  • Calendrier

J’ai réussi à faire que les données du formulaire s’enregistrent dans les 3 feuilles (Transports, Info patients-clients, Calendrier) et à chaque nouvelles infos du formulaire, une nouvelle ligne se créée et ajoute les données.

J’ai juste un problème, avec la feuille « Calendrier ». Dès que mon code VBA se met en marche, une nouvelle ligne s’installe avec les nouvelles données du formulaire.
Malheureusement, la ligne précédentes avec les anciennes données sont remplacées avec les nouvelles infos du formulaire.
Ce qui fait, que j’ai toutes les lignes avec les mêmes valeurs.

Merci par avance pour votre aide.

Voici mon fichier:
Formulaire_version_1_2.xlsm (45,3 Ko)

Ci-dessous le code:

Sub Sauvegarde()
’ transports Macro
Sheets(« Formulaire »).Range(« A43:T43 »).Select
Selection.Copy
Sheets(« Transports »).Select
Range(« A2 »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.ListObject.ListRows.Add (1)

’ infos_clients Macro
Sheets(« Formulaire »).Select
Range(« K43:S43 »).Select
Selection.Copy
Sheets(« Infos patients-clients »).Select
Range(« A2 »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.ListObject.ListRows.Add (1)

’ calendrier Macro
Sheets(« Transports »).Select
Range(« A3,B3,E3,G3:J3,K3:M3,O3:P3,S3 »).Select
Range(« S3 »).Activate
Selection.Copy
Sheets(« Calendrier »).Select
Range("Tableau3[DATE " & Chr(10) & « TRANSPORT] »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Tableau3[DATE " & Chr(10) & « TRANSPORT] »).Select
Application.CutCopyMode = False
Selection.ListObject.ListRows.Add (1)

’ suppression Macro
Sheets(« Formulaire »).Select
Range(« A3:E3 »).Select
Selection.ClearContents
Range(« A6:E6 »).Select
Selection.ClearContents
Range(« A9:E9 »).Select
Selection.ClearContents
Range(« A13:B14 »).Select
Selection.ClearContents
Range(« D13:E14 »).Select
Selection.ClearContents
Range(« A17:B17 »).Select
Selection.ClearContents
Range(« D17:E17 »).Select
Selection.ClearContents
Range(« A20:E20 »).Select
Selection.ClearContents
Range(« A23:E23 »).Select
Selection.ClearContents
Range(« A26:E30 »).Select
Selection.ClearContents
Range(« A3 »).Select
ActiveWorkbook.Save
End Sub

Salut
Je n’ai pas trop bien compris ta macro calendrier
Je te propose une macro calendrier2 qui remplit l’onglet « Calendrier » à partir des données de l’onglet « Transports »
A toi de me dire si cela correspond à ton attente

https://cjoint.com/c/JCtoLR0zP2C

Hello,
Je viens de voir ton code et fait quelques modifications et ajout de colonne.
Ce que tu as fait fonctionne très bien maintenant.

Etant un noob dans le domaine, pourrais-tu m’expliquer que font les lignes:

i = 2 (je comprend pas)
ligne = 2 (je pense que ça sélectionne la ligne 2 de la feuille)
i = i+1 (je comprend pas)
ligne = ligne + 1 (ça je pense que c’est un ajout de ligne)

Explication de ce j’ai fait pour le code « Calendrier »

Je pars de la feuilles ou se trouvent mes données
Sheets(« Transports »).Select

Je sélectionne les cellules que je souhaites recopier
Range(« A3,B3,E3,G3:J3,K3:M3,O3:P3,S3 »).Select
Selection.Copy

Je pense que c’est ma première erreur, cette élément ne doit pas existe :slight_smile:
Range(« S3 »).Activate

Je repars dans le fichier ou je souhaite coller mes données
Sheets(« Calendrier »).Select

Je je sélectionne la premier case du fichier
Range("Tableau3[DATE " & Chr(10) & « TRANSPORT] »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Je pense c’est la deuxième erreure :slight_smile:
Range("Tableau3[DATE " & Chr(10) & « TRANSPORT] »).Select

Application.CutCopyMode = False
Selection.ListObject.ListRows.Add (1)

Merci beaucoup pour ton aide.

i et ligne sont des variables que je fais évoluer dans une boucle Do while, Loop
La boucle reste en vigueur tant que la condition décrite sur cette ligne est valide :

Do While i < Sheets(« Transports »).Range(« A65535 »).End(xlUp).Row + 1

qui veut dire tant que la variable i est inferieur à la dernière ligne de l’onglet « Transport »)

En fin de boucle les variables i et ligne évoluent avec ces lignes :

i = i + 1
ligne = ligne + 1

Les autres lignes ne sont là que pour rapporter les valeurs avec la variable i pour déterminer la ligne de l’onglet source « Transports » à traiter et la variable ligne pour déterminer la ligne de l’onglet cible « Calendrier » dans laquelle on rapporte les valeurs
Et à chaque boucle ceux ci d’évoluer d’un +1 pour traiter les lignes suivantes

Au début du traitement je détermine les valeurs de base de ces variables soit :
i = 2
ligne = 2

je traite donc les données de l’onglet « Transports » à partir de la ligne 2 et je les rapporte dans l’onglet « Calendrier » à partir de la ligne 2

Voilà pour les explications de mon code

En ce qui concerne le tiens pour les lignes :
Range(« A3,B3,E3,G3:J3,K3:M3,O3:P3,S3 »).Select
Range(« S3 »).Activate
Selection.Copy
Tu sélectionnes un certain nombre de cellules décrit dans l’instruction Range de la seule ligne 3 de l’onglet actif Sheets(« Transports »).Select
Cette ligne est pratiquement vide de donnée
De plus n’englobe pas les 3 autres lignes suivantes remplies de paramètres
Du sélectionnes ensuite « S3 » (Range(« S3 »).Activate)
Dont tu fais la copie
Pour recopier dans l’onglet « Calendrier »
(Sheets(« Calendrier »).Select)
Range("Tableau3[DATE " & Chr(10) & « TRANSPORT] »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Tu ne peux de cette façon avoir l’ensemble des données de l’onglet « Transports » vers l’onglet « Calendrier »
Tu fais référence aussi à un Tableau « Tableau3 » qui doit être paramétré pour cibler les cellules adaptées mais avec une source en copie défaillante cela ne pouvait pas le faire

Je n’ai pas cherché à modifier ton code pour répondre à ton besoin car celui-ci me semblait un peu lourd j’ai préféré te proposer une autre approche en espérant qu’elle réponde à l’ensemble de tes besoins

A toi de me dire

C’est un peu du charabia pour moi, car je n’ai pas appris la programmation.
Mais je vais potasser ton résumé en me refaisant un fichier de ce genre avec tes explications.

Merci pour ton aide et tes éclaircissements.

A bientôt

Regardes les lignes qui aliment l’onglet cible avec les données de l’onglet source
Si j’en prends une :

Sheets(« Calendrier »).Range(« A » & ligne).Value = Sheets(« Transports »).Range(« A » & i).Value

Tu vois bien que je considère la cellule A de la ligne que porte la variable ligne pour l’onglet « Calendrier » et je considère la cellule A de la ligne que porte la variable i de l’onglet « Transport »
Lorsque je démarre la boucle Do while/Loop les variable portent la valeur 2
i = 2
ligne = 2
Donc cette ligne c’est comme si je l’écrivais ainsi :

Sheets(« Calendrier »).Range(« A2 »).Value = Sheets(« Transports »).Range(« A2 »).Value

A la fin de la boucle je fais évoluer ces variables :

i = i + 1
ligne = ligne + 1

Donc à la boucle suivante ces variable ont la valeur 3
Donc cette ligne :

Sheets(« Calendrier »).Range(« A » & ligne).Value = Sheets(« Transports »).Range(« A » & i).Value

C’est comme si je l’écrivais ainsi :

Sheets(« Calendrier »).Range(« A3 »).Value = Sheets(« Transports »).Range(« A »).Value

Ainsi de suite jusqu’à la fin des boucles déterminer par cette ligne :

Do While i < Sheets(« Transports »).Range(« A65535 »).End(xlUp).Row + 1

C’est à dire lorsque la variable i ne sera plus inferieur au numéro de la dernière ligne libre de l’onglet « Transport » soit la ligne 7
Dés que i = 8 la boucle s’arrête
Ce n’est pas plus compliqué
N’hésites pas pour d’autres précisions

1 « J'aime »

Petites coquille

C’est à dire lorsque la variable i ne sera plus inferieur au numéro de la dernière ligne libre de l’onglet « Transport » soit la ligne 7
Dés que i = 8 la boucle s’arrête

Non c’est dés que i = 7 la boucle s’arrête car i doit être inférieur à 7
Mille excuses

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.