Actualité informatique
Test comparatif matériel informatique
Jeux vidéo
Astuces informatique
Vidéo
Télécharger
Services en ligne
Forum informatique
01Business

|-  LOGICIELS

||-  Logiciels

|||-  

VBA Excel pour gérer le format Tableau

 

Ajouter une réponse
 

 
Page photos
 
     
Vider la liste des messages à citer
 
 Page :
1
Auteur
 Sujet :

VBA Excel pour gérer le format Tableau

Prévenir les modérateurs en cas d'abus 
GMeunier
gmeunier
Présent de temps en temps (De 50 à 99 messages postés)
  1. Posté le 20/01/2020 à 15:48:02  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour,

Je mets à jour périodiquement une base de données d’indicateurs (Base de Données) en copiant collant une feuille de mise à jour (Mise à jour) ayant ce jeu d’indicateurs et en modifiant la date et la valeur, pour la nouvelle période. Les 2 bases sont au format Tableau et j’ai automatisé avec une macro le copier-coller et la remise à blanc de la feuille Mise à Jour. Cela marche bien. Voir ci-dessous.
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Sub MàJ()
  2.  Dim ligne As Long
  3. 'Sélection de la feuille Mise à Jour (Feuil3) dans le cahier
  4.  Feuil3.Select
  5. 'Sélection du tableau Mise à Jour
  6.  Range("A1").CurrentRegion.Offset(1).Resize(Range("A1").CurrentRegion.Rows.Count - 1, Range("A1").CurrentRegion.Columns.Count).Select
  7.  Selection.Copy
  8. 'Sélection de la feuille Base de données
  9.  Sheets("Données").Select
  10. 'Numéro de la première ligne vide
  11.  ligne = Sheets("Données").Range("A1048576").End(xlUp).Row + 1
  12. 'Sélection de la première ligne vide
  13.  Range("A" & ligne).Select
  14. 'Copie de la mise à jour
  15.  ActiveSheet.Paste
  16. 'Remettre à blanc les colonnes variables (B et H) de MàJ
  17.  Feuil3.Select
  18.  Range("B2", Range("B2").End(xlDown)).Clear
  19.  Range("H2", Range("H2").End(xlDown)).Clear
  20. End Sub



J’ai aussi créé une macro qui génère un numéro d’identification (Colonne « A » ID) pour les données ajoutées à la suite de la base principale (les lignes de la période précédente ont déjà un numéro ID) Voir code ci-dessous. Or ce code ne fonctionne que si la base est au format Plage de données. Après des recherche, j’ai cru comprendre que c’était lié à l’objet Tableau et qu’il fallait utiliser ListObject et les instruction adaptées. Mais là, j’ai du mal !
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Sub NumAuto()
  2.  Dim i As Long, DernLigne As Long, PremLigne As Long
  3.  Sheets("MàJ").Select
  4. ' N° de la dernière ligne de la colonne A non vide
  5.  DernLigne = Range("A" & Rows.Count).End(xlUp).Row
  6.  Debug.Print DernLigne
  7.  PremLigne = DernLigne + 1
  8.  Debug.Print PremLigne
  9. 'Remplissage du numéro ID en colonne A jusqu'à la dernière ligne vide en colonne B
  10.  For i = PremLigne To Range("B" & Rows.Count).End(xlUp).Row
  11.    Debug.Print i
  12.    Range("A" & i).Select
  13.    ActiveCell.FormulaR1C1 = i
  14.  Next i
  15. End Sub



Je suis preneur d’une aide pour adapter mes 2 macros au fait que je travaille avec des Objets Tableau.

Merci!

Edit par Tintin10 : rajout des balises de code
Message édité par Tintin10 le 20/01/2020 à 16:24:13

---------------
GDM
  1. config
tintin10
Habitué (de 5 000 à 9 999 messages postés) Développeur
  1. Posté le 20/01/2020 à 20:36:05  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour. Exactement, l'erreur arrive où ?


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
(Publicité)
gmeunier
Présent de temps en temps (De 50 à 99 messages postés)
  1. Posté le 21/01/2020 à 09:46:07  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Tintin10, bonjour,
La question est le format Tableau. La première macro, pour ajouter un Tableau "Mise à Jour" à un autre "Base de Données", fonctionne même si les 2 bases sont au format Tableau. Ma question pour cette macro est peut-être pourrait on l'écrire avec la syntaxe des Tableaux?
Pour la 2° macro, c'est différent. Cette macro fonctionne bien et crée les numéros si les données sont en format Plage de Données mais ne crée pas la liste de numéro si les données sont au format Tableau. La macro ne parvient pas à identifier la dernière ligne remplie de la colonne A mais me renvoie le numéro de la dernière remplie du Tableau (Seule la colonne A n'est pas remplie lors de l'ajout et est à numéroter, mais les autres colonnes le sont.
Merci et à bientôt.


---------------
GDM
  1. config
tintin10
Habitué (de 5 000 à 9 999 messages postés) Développeur
  1. Posté le 23/01/2020 à 22:36:08  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour. J'imagine que ça joue là-dessus, notamment :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. ligne = Sheets("Données").Range("A1048576").End(xlUp).Row + 1

En effet, il existe un moyen de référencer directement un tableau au sens Microsoft Excel du terme, et tu dois en effet passer par un objet de type "ListObject".
Le nom du tableau apparaît en haut à gauche dans l'onglet Création, du moment que tu aies au moins une cellule de sélectionnée dedans. Si ce nom est "Tableau1", tu référenceras alors ton tableau ainsi :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Range("Tableau1").Select
  2. Selection.Copy


Pour la deuxième macro, il faut en effet pouvoir trouver la dernière cellule remplie. L'excellent site Stackoverflow.com m'a donné la réponse après un peu de recherche, car ce n'est pas très évident :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. With t.ListColumns(1).Range
  2.  DernLigne = .Find(What:="*", After:=.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
  3. End With
Message cité 1 fois

---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
gmeunier
Présent de temps en temps (De 50 à 99 messages postés)
  1. Posté le 24/01/2020 à 10:13:18  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 

Tintin10 a écrit :

Bonjour. J'imagine que ça joue là-dessus, notamment :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. ligne = Sheets("Données").Range("A1048576").End(xlUp).Row + 1

En effet, il existe un moyen de référencer directement un tableau au sens Microsoft Excel du terme, et tu dois en effet passer par un objet de type "ListObject".
Le nom du tableau apparaît en haut à gauche dans l'onglet Création, du moment que tu aies au moins une cellule de sélectionnée dedans. Si ce nom est "Tableau1", tu référenceras alors ton tableau ainsi :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Range("Tableau1").Select
  2. Selection.Copy


Pour la deuxième macro, il faut en effet pouvoir trouver la dernière cellule remplie. L'excellent site Stackoverflow.com m'a donné la réponse après un peu de recherche, car ce n'est pas très évident :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. With t.ListColumns(1).Range
  2.  DernLigne = .Find(What:="*", After:=.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
  3. End With

Afficher plus
Afficher moins


Tintin10,

Merci pour les précisions Stackoverflow, nom du tableau, etc. Les références Tableau me sont encore difficiles mais ça progresse!
Voilà la procédure que maintenant j'utilise après des recherches de mon coté.

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Sub NumAutoOK()
  2.  Dim i As Long
  3.  Sheets("Données").Select
  4.  With Sheets("Données").ListObjects(1)
  5.    For i = 1 To .ListRows.Count
  6.      .ListRows(i).Range(1) = i
  7.    Next i
  8.  End With
  9. End Sub


Mais j'ai encore une question pour ListObjects(1). Cela fonctionne avec 1 (Il y a un seul Tableau sur cette feuille) mais aussi avec le nom donné du Tableau ("T_Données" ). Comment trouver le numéro (1 ou 2 ...) utilisé par Excel puisque j'ai remplacé le nom initial avec ce numéro par un nom plus explicite?

Très cordialement
GMeunier
Message édité par Tintin10 le 24/01/2020 à 18:55:08

---------------
GDM
(Publicité)
  1. config
tintin10
Habitué (de 5 000 à 9 999 messages postés) Développeur
  1. Posté le 24/01/2020 à 19:05:18  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Pour trouver le numéro, je ferais une boucle sur les objets jusqu'à retrouver celui qui a le bon nom :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. Dim res As Integer
  2. res = 0
  3. For i = 1 To Sheets("Données").ListObjects
  4.  If res = 0 And Sheets("Données").ListObjects(i).name = "T_Données" Then
  5.    res = i
  6.  End If
  7. Next i


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
 Page :
1

Aller à :
 

Sujets relatifs
Excel : sélectionner une plage de donnée en fonction de la valeur d'une cellule Office 365 bloqué "hors format"
Méthode Copier Coller VBA avec impoutbox enchainement VBA sur 1 feuille xls
Recherche des doublons par VBA Excel Liste déroulante en cascade sans VBA
Impossible de déplacer un tableau sur Word Logiciel pour gérer l'emplacement des fenêtres sous Windows 10 ?
Plus de sujets relatifs à : VBA Excel pour gérer le format Tableau

Les 5 sujets de discussion précédents Nombre de réponses Dernier message
Outlook 2016 et fichiers Docx 5
Plus de son windows 10 25
Sujet Avast gratuit 4
remplacer windows7 15
Touchpad Acer Aspire E 17 ES1-771G 4