Microsoft 365 VBA Compter 2 lignes après la fin d'un tableau dont on a le nom

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bluesky12000

XLDnaute Junior
Bonsoir à tous,

Avec du VBA j'insère dans une feuille des tableaux via des connexions Power query.
Chaque tableau correspond à un 1 jour et s'appelle Jour" & i & "_client.
Le nombre de jours est variable et la taille des tableaux est elle aussi variable.
Je peux donc avoir dans un document 2 tableaux et dans un autre 8 tableaux.
Je souhaiterais pouvoir insérer automatiquement un texte entre chaque tableau. Ce texte est lié à des informations situées dans un autre onglet.

Si tous mes tableaux sont vides, tout va bien puisque j'ai indiqué une position fixe
Voici un exemple qui fonctionne pour ajouter mon titre :
Code:
If ws1.Range("F26").Value <> "" Then ws2.Range("D11").Formula = "=Projet!F26"
If ws1.Range("F27").Value <> "" Then ws2.Range("D16").Formula = "=Projet!F27"
If ws1.Range("F28").Value <> "" Then ws2.Range("D21").Formula = "=Projet!F28"
If ws1.Range("F29").Value <> "" Then ws2.Range("D26").Formula = "=Projet!F29"
If ws1.Range("F30").Value <> "" Then ws2.Range("D31").Formula = "=Projet!F30"
If ws1.Range("F31").Value <> "" Then ws2.Range("D36").Formula = "=Projet!F31"
If ws1.Range("F32").Value <> "" Then ws2.Range("D41").Formula = "=Projet!F32"
If ws1.Range("F33").Value <> "" Then ws2.Range("D46").Formula = "=Projet!F33"
Note : l'écart entre D11 et D16 est de 5 ce qui correspond à 2 lignes d'un tableau vide et aux 3 lignes d'écart entre chaque tableau

Problème :
Si j'ajoute les tableaux alors qu'ils contiennent déjà des données (ce qui arrive tout le temps), alors l'emplacement des titres n'est plus le bon. Je perds donc toute flexibilité d'utilisation.

J'arrive à espacer mes tableaux de 3 lignes grâce à myLastRow + 4

VB:
Sub Creer_Cotation_Client2()

Dim i, ws1, ws2 As Worksheet
Set ws1 = Worksheets("Projet")
Set ws2 = Worksheets("Cotation Client")

Dim myLastRow As Long
 
myLastRow = ws2.Range("D500").End(xlUp).Row

'B28 est le nombre de jour dans l'onglet projet

For i = 1 To ws1.Range("B28")
 
With ws2.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Jour" & i & "_client;Extended Properties=""""" _
        , Destination:=Range("B" & myLastRow + 4)).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Jour" & i & "_client]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Jour" & i & "_client"
        .Refresh BackgroundQuery:=False
    End With
 
myLastRow = ws2.Range("B500").End(xlUp).Row

Next i

End Sub

Si les tableaux sont déjà remplis et de taille variable, comment puis-je insérer mes titres sur la 2e ligne qui sépare chaque tableau en utilisation la même logique que mylastrow, mais en faisant référence au nom du tableau?

Edit : J'ai réussi à résoudre mon problème.

Code:
Sub Titres()

Dim i, ws1, ws2 As Worksheet
Set ws1 = Worksheets("Projet")
Set ws2 = Worksheets("Cotation Client")

Dim myLastTableRow As Long
Dim Tableau As ListObject

' B28 est le nombre de jour dans l'onglet projet
For i = 1 To ws1.Range("B28")

Set Tableau = ws2.ListObjects("Jour" & i & "_client")

myLastTableRow = Tableau.Range.rows(Tableau.Range.rows.Count).Row
If ws1.Range("F26").Value <> "" Then ws2.Range("D11").Value = ws1.Range("F26").Value
If ws1.Range("F" & i + 25).Value <> "" Then ws2.Range("D" & myLastTableRow + 2).Value = ws1.Range("F" & i + 26).Value

Next i
End Sub

J'espère avoir été clair 😱

Merci et bonne soirée à tous,
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
1 K
Réponses
17
Affichages
2 K
Réponses
0
Affichages
1 K
Retour