Remplir des tableaux à partir d'un autre tableau

ozone083

XLDnaute Junior
Bonjour

Mes connaissances en VBA étant limité, je cherche désespérément à remplir automatiquement (via le Clic sur Formulaire), 2 onglets destinations comportant chacun un tableau avec un format particulier et ceci à partir d'un onglet source.
Suivant la condition sur une colonne (correspondant au nom de l'onglet destination*) de l'onglet source (nommé Inscription), c'est soit l'onglet 1 ou l'onglet 2 qui se remplira.

Je n'ai pas trouvé de sujets identiques sur le forum.
Aussi si vous êtes inspirés pour m'aider, je vous en remercie.

cdt

Ozone


PS : fichier exemple joint

* : est il possible de faire une sélection sur une partie du mot ; concretement dans l'onglet Source, j'ai le nom "Babo Min" et je veux que cela permette de remplir l'onglet "Babo"
 

Pièces jointes

  • Exemple 2.xlsx
    48.4 KB · Affichages: 89
  • Exemple 2.xlsx
    48.4 KB · Affichages: 80
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour Ozone,

Je n'arrive pas à faire la correspondance des champs de la feuille source avec ceux des feuilles cibles Peux-tu remplir les feuilles Babo et Traot pour voir le résultat souhaité?

Faut-il effacer les données des feuilles cibles à chaque opération ou faut-il les ajouter à la suite les unes des autres?

A +

Cordialement.
 

ozone083

XLDnaute Junior
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour Ozone,

Je n'arrive pas à faire la correspondance des champs de la feuille source avec ceux des feuilles cibles Peux-tu remplir les feuilles Babo et Traot pour voir le résultat souhaité?

Faut-il effacer les données des feuilles cibles à chaque opération ou faut-il les ajouter à la suite les unes des autres?

A +

Cordialement.

Bonjour

En pièce jointe, j'ai rempli quelques lignes de Babo et Traot.
Non il ne faut pas effacer les lignes, il faut qu'elles soient ajoutées les unes à la suite des autres.

Merci
 

Pièces jointes

  • Exemple 3.xlsx
    49 KB · Affichages: 62
  • Exemple 3.xlsx
    49 KB · Affichages: 76

Papou-net

XLDnaute Barbatruc
Re : Remplir des tableaux à partir d'un autre tableau

Bonsoir Ozone,

Avec un peu de retard, voici ton ficheir avec une macro attachée au bouton Formulaire.

Je te laisse le soin de tester.

A +

Cordialement.
 

Pièces jointes

  • Copie de Exemple 3.xlsm
    56.3 KB · Affichages: 87

ozone083

XLDnaute Junior
Re : Remplir des tableaux à partir d'un autre tableau

Bonsoir Ozone,

Avec un peu de retard, voici ton ficheir avec une macro attachée au bouton Formulaire.

Je te laisse le soin de tester.

A +

Cordialement.

Bonsoir

C'est super !! génial !!!
Un énorme merci pour cette aide.

Maintenant j'essaie de comprendre la macro et la syntaxe : a quel moment se fait le test sur le nom de l'onglet ?
Car je veux faire évoluer cette macro dans le cas où les 2 formulaires n'ont pas le même format......(mêmes informations mais mises différemment - pas sur le même numéro de ligne, ni sur la même colonne).

Merci
 

Papou-net

XLDnaute Barbatruc
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour Ozone,

Voici le code commenté pour expliquer le fonctionnement de la macro:

Code:
Sub Formulaire()
Dim CelS As Range, CelC As Range, d As Byte, sh As Object
'CelS = cellule source dans Feuil1 colonne C
'CelC = cellule cible (1ère cellule vide dans la feuille sh, colonne C)
'd = décalage pour cocher la bonne cellule de véhicule dans la feuille sh (décalage à droit par rapport à la colonne c)
'sh = feuille correspondant à l'agence

Application.ScreenUpdating = False 'suspend le rafraîchissement d'écran qui ralentit le déroulement de la macro
'La boucle suivante cherche la feuille qui contient tout ou partie du nom contenu en colonne C
For Each CelS In Feuil1.Range("C8:C" & Rows.Count).SpecialCells(xlCellTypeConstants)
  For Each sh In Sheets
    If InStr(CelS, sh.Name) > 0 Then Exit For 'si le nom est trouvé, fin de la boucle et sh désigne la feuille de l'agence
  Next
With sh
  Set CelC = .Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) 'cherche la 1ère cellule vide en colonne C de la feuille sh
  'les lignes suivantes recopient les cellules source dans les cellules cibles en se référant au décalage par rapport à CelS et CelC
  CelC = CelS.Offset(0, 3) 'Nom
  CelC.Offset(0, 1) = CelS.Offset(0, 4) 'Prénom
  CelC.Offset(0, 2) = CelS.Offset(0, 5) 'Téléphone
  CelC.Offset(0, 3) = CelS.Offset(0, 2) 'Pt RDV
  Select Case CelS.Offset(0, 6).Value
    Case Is = sh.Cells(20, 7) 'Camion
      d = 4
    Case Is = sh.Cells(20, 8) 'Vélo
      d = 5
    Case Is = sh.Cells(20, 9) 'Voiture
      d = 6
  End Select
  CelC.Offset(0, d) = "X"
  CelC.Offset(0, 7) = CelS.Offset(0, 8)
End With
Next
Application.ScreenUpdating = True 'réactive le rafraîchissement d'écran
End Sub
Toutefois, je te signale que si les cellules sont disposées différemment dans les feuilles, celà complique un peu la macro. Il faut en effet situer les en-têtes de colonnes pour pouvoir recopier les données au bon endroit.

Dans ce cas, un fichier exemple avec la nouvelle structure serait souhaitable.

A +

Cordialement.
 

ozone083

XLDnaute Junior
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour Ozone,

Voici le code commenté pour expliquer le fonctionnement de la macro:

Code:
Sub Formulaire()
Dim CelS As Range, CelC As Range, d As Byte, sh As Object
'CelS = cellule source dans Feuil1 colonne C
'CelC = cellule cible (1ère cellule vide dans la feuille sh, colonne C)
'd = décalage pour cocher la bonne cellule de véhicule dans la feuille sh (décalage à droit par rapport à la colonne c)
'sh = feuille correspondant à l'agence

Application.ScreenUpdating = False 'suspend le rafraîchissement d'écran qui ralentit le déroulement de la macro
'La boucle suivante cherche la feuille qui contient tout ou partie du nom contenu en colonne C
For Each CelS In Feuil1.Range("C8:C" & Rows.Count).SpecialCells(xlCellTypeConstants)
  For Each sh In Sheets
    If InStr(CelS, sh.Name) > 0 Then Exit For 'si le nom est trouvé, fin de la boucle et sh désigne la feuille de l'agence
  Next
With sh
  Set CelC = .Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) 'cherche la 1ère cellule vide en colonne C de la feuille sh
  'les lignes suivantes recopient les cellules source dans les cellules cibles en se référant au décalage par rapport à CelS et CelC
  CelC = CelS.Offset(0, 3) 'Nom
  CelC.Offset(0, 1) = CelS.Offset(0, 4) 'Prénom
  CelC.Offset(0, 2) = CelS.Offset(0, 5) 'Téléphone
  CelC.Offset(0, 3) = CelS.Offset(0, 2) 'Pt RDV
  Select Case CelS.Offset(0, 6).Value
    Case Is = sh.Cells(20, 7) 'Camion
      d = 4
    Case Is = sh.Cells(20, 8) 'Vélo
      d = 5
    Case Is = sh.Cells(20, 9) 'Voiture
      d = 6
  End Select
  CelC.Offset(0, d) = "X"
  CelC.Offset(0, 7) = CelS.Offset(0, 8)
End With
Next
Application.ScreenUpdating = True 'réactive le rafraîchissement d'écran
End Sub
Toutefois, je te signale que si les cellules sont disposées différemment dans les feuilles, celà complique un peu la macro. Il faut en effet situer les en-têtes de colonnes pour pouvoir recopier les données au bon endroit.

Dans ce cas, un fichier exemple avec la nouvelle structure serait souhaitable.

A +

Cordialement.



Merci pour ces explications
Finalement pour l'onglet ayant un tableau un peu différent, je vais passer par un tableau "tampon" dans lequel j'irai chercher mes données, cela sera plus simple (via des recherchev ou simplement des = cellule)

Juste une question additionnelle : si je veux, lors du "clic" sur Formulaire, que les tableaux destinations soient d'abord effacés de leur contenu avant le remplissage, que dois je ajouter comme syntaxe ?
Cela afin d'éviter qu'en cliquant plusieurs fois on ajoute des doublons dans le tableau.

Merci une nouvelle fois pour votre aide, c'est génial et cela me facilite grandement la tâche.
 

Papou-net

XLDnaute Barbatruc
Re : Remplir des tableaux à partir d'un autre tableau

RE

Voici ton fichier modifié.

La structure des boucles a été revue pour s'adapter à ta demande d'effacement des données précédentes.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Copie 01 de Exemple 3.xlsm
    56.3 KB · Affichages: 78

ozone083

XLDnaute Junior
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour

Tous mes vœux pour 2016 !!

Si je souhaite maintenant compléter le remplissage en ajouter la date et la station (cellule jaune dans le fichier joint), quel code dois je ajouter et surtout où le mettre dans le programme ?
En ajoutant cela :

Set CelC = .Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
CelC = CelS.Offset(0, 3) 'Nom
CelC.Offset(0, 1) = CelS.Offset(0, 4) 'Prénom
CelC.Offset(0, 2) = CelS.Offset(0, 5) 'Téléphone
CelC.Offset(0, 3) = CelS.Offset(0, 2) 'Pt RDV
CelC.Offset(-3, -1) = CelS.Offset(0, -1) 'Date
CelC.Offset(-3, 3) = CelS.Offset(0, 1) 'Lieu

le remplissage ne se fait pas correctement.

Pourriez vous m'aider ?

Enfin comment gérer le cas où on aurait 2 stations le même jour ? est il possible d'afficher les 2 stations ?

Merci une nouvelle fois pour votre aide.

Cordialement

Bonne journée
 

Pièces jointes

  • Exemple 3_1.xlsm
    57.2 KB · Affichages: 71

Papou-net

XLDnaute Barbatruc
Re : Remplir des tableaux à partir d'un autre tableau

Bonjour ozone083,

Je ne suis pas certain d'avoir tout compris de ta nouvelle demande.

En effet, il me parait difficile d'afficher la date et la station dans les cellules jaunes puisqu'elles peuvent être multiples dans une même feuille.

La solution la plus simple me paraîtrait d'ajouter deux colonnes supplémentaires et d'y insérer ces nouvelles données.

Au besoin, peux-tu joindre un exemple fait main de ce que tu souhaites?

A +

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
314 745
Messages
2 112 406
Membres
111 535
dernier inscrit
MJS1