Sélectionnez un tableau jusqu'à ce que la colonne c soit vide

Bonjour,

j'ai enregistré un macro pour l'affecter à un bouton. Je sélectionne un tableau.

je voudrais remplacer la ligne 300:

Sheets("Budget").Select

Range("A6:AN300").Select

par: jusqu'à ce que la colonne C ligne xx soit vide ( Attention ma cellule n'est pas totalement vide car j'ai une formule dedans dont la valeur est "")

Par avance merci

Bonjour,

Serait-il possible de fournir un fichier excel pour illustrer votre besoin, car on mon avis la méthode retenue n'est pas la meilleure...

Bonjour Pedro,

Dans ma macro, je sélectionne le tableau de la feuille budget de A6 à AN300 pour le copier en valeur sur une autre feuille.

Plutot que de tout sélectionner comme ça, je voudrais arrêter la sélection à la première ligne non vide de la colonne C. Donc A6 jusqu'à ANi

Sub generation

Dim DL As Long

DL = Range("C" & Rows.Count).End(xlUp).Select

Sheets("Budget").Activate

ActiveSheet.Range(Cells(1, 6), Cells(40, DL)).Select

Selection.Copy

(...)

Mais j'ai dû mal faire quelque chose.

merci

Une cellule qui contient une formule dont le résultat est "" n'est pas considérée comme vide. Donc la propriété .End est inefficace dans ce cas de figure.

Je réitère ma demande quant à un fichier qui nous permet de mieux apprécier ta demande, pour te proposer une solution pertinente.

bonjour,

Voici un tableau test qui reprend ma problématique.

6test-xlsm.xlsx (134.95 Ko)

Envoyé depuis mon téléphone portable j'ai l'impression que l'extension du fichier a été modifié il était en xlsm auparavant .

Effectivement, de mon côté Excel ne veut pas ouvrir ton fichier, qu'il considère endommagé !

ça devrait mieux fonctionner là. Désolée

6test.xlsm (134.95 Ko)

Dans votre exemple, le tableau budget est une copie conforme du tableau Import, qui lui, ne contient pas de formule. J'imagine que dans le fichier original, ce n'est pas aussi simple ? Car sinon il suffit de calibrer la taille du tableau budget à partir du tableau Import...

Un essai :

Sub CopieTableau()

Dim LigMax As Integer

LigMax = Application.CountIf(Sheets("Budget").Range("C6:C300"), ">0") + 5 'Dernière ligne non nulle en colonne C
Sheets("Budget").Range("A6:AN" & LigMax).Copy 'Copie jusqu'à la dernière ligne
Sheets("Budget final").Range("A6").PasteSpecial Paste:=xlPasteValues 'Collage en valeurs uniquement

End Sub

En effet Pedro, mon onglet budget est rempli de fonctions et fonctions matricielles qui retraite les données de "Import", entre autres.

Dans la colonne C Matricule de l'onglet "Budget" j'ai cette formule: SI(calcul!D106=0;"";calcul!D106)

J'ai crée un bouton dans l'onglet "Budget Final" et j'ai copié le code. J'ai bien eu une copie mais de l'en-tête et de la première ligne uniquement.

J'ai mis +6 et là je n'ai plus l'en-tête mais je n'ai que la première ligne. Là j'avoue je ne sais pas pourquoi.

Merci

Sub Génération()
Dim LigMax As Integer

LigMax = Application.CountIf(Sheets("Budget").Range("C6:C300"), ">0") + 6 'Dernière ligne non nulle en colonne C
Sheets("Budget").Range("A6:AN" & LigMax).Copy 'Copie jusqu'à la dernière ligne
Sheets("Budget final").Range("A6").PasteSpecial Paste:=xlPasteValues 'Collage en valeurs uniquement

End Sub

Bonsoir tout le monde,

Une autre proposition....à tester...

Sub Macro2()
 Dim tb, tbR(), k&, i&, j&
  tb = Sheets("Budget").Range("A5").CurrentRegion
   k = 0
    For i = 2 To UBound(tb, 1)
     If tb(i, 3) <> "" Then
      ReDim Preserve tbR(1 To 40, 1 To k + 1)
        For j = 1 To 40
         tbR(j, 1 + k) = tb(i, j)
        Next j
    k = 1 + k
     End If
    Next i
   Sheets("Budget final").Range("A5").CurrentRegion.Offset(1, 0).ClearContents
  On Error Resume Next
  Sheets("Budget final").Range("A6").Resize(UBound(tbR, 2), 40) = Application.Transpose(tbR)
  Sheets("Budget final").Range("A6").Resize(UBound(tbR, 2), 40).Borders.Weight = xlThin
End Sub
3test.xlsm (140.04 Ko)

Cordialement,

Sub Macro2()
 Dim tb, tbR(), k&, i&, j& ' les variables
  tb = Sheets("Budget").Range("A5").CurrentRegion   'selectionne une région de la feuille a partir de A(
   k = 0   ' là je ne comprends pas pourquoi K=0 ??
    For i = 2 To UBound(tb, 1)  'renvoi à la dimension de la séléction en utilisant le resultant de tb
     If tb(i, 3) <> "" Then ' si tb est vide sur la 3eme colonne
      ReDim Preserve tbR(1 To 40, 1 To k + 1) 'alors on redimensionne la selection
        For j = 1 To 40
         tbR(j, 1 + k) = tb(i, j)
        Next j
    k = 1 + k
     End If
    Next i
   Sheets("Budget final").Range("A5").CurrentRegion.Offset(1, 0).ClearContents
  On Error Resume Next
  Sheets("Budget final").Range("A6").Resize(UBound(tbR, 2), 40) = Application.Transpose(tbR)
  Sheets("Budget final").Range("A6").Resize(UBound(tbR, 2), 40).Borders.Weight = xlThin
End Sub

Au top!

J'ai bien récupéré toutes mes données. Le seul problème c'était que l'entête a été rapatrié sur la ligne du dessous en 6.

Du coup je me suis adaptée en descendant l'en tete d'une ligne ;-) Et hop tout fonctionne nikel. MERCI.

Puis je abuser et demander une petite explication de VBA? (une jour j'aimerai bien les rédiger moi même alors j'essai de comprendre)

Bonjour à tous,

@Wikimel:

Pour le principe,:

  • Je stocke toutes les données dans un premier tableau temporaire tb
  • Ensuite je boucle sur toutes les lignes (i) de tb ( à partir de la ligne 2, j'exclue les entêtes car déjà présentes sur la feuille Budget final, si tu veux les entêtes, remplace 2 par 1)
  • Si je trouve un matricule (tb(i,3)) alors j'écris les données dans un second tableau temporaire tbR.
  • k correspond à l'index (colonne) de tbR, à chaque fois que j'écris une ligne, je l'incrémente de 1.
  • Pour simplifier l'écriture, j'ai fait une boucle sur les colonnes (j), sinon, il fallait écrire 40 lignes...( tbR(1,1+k)=tb(i,1)...tbR(2, 1+k)=tb(i,2)..etc....tbR(40,1+k)=tb(i,40) )

Sur la feuille Budget final:

  • Comme j'ai déjà inscrit les entêtes, j'efface à partit de A6 (si tu as pris les entêtes, tu peux tout effacer).
  • J'écris les données transposées de tbR à partir de A6 et je mets des bordures (si tu as pris les entêtes, mets A5 au lieu de A6)

Le code commenté:

6test-commente.xlsm (148.01 Ko)

Cordialement,

Bonjour et merci beaucoup Xorsankukai d'avoir pris le temps de m'expliquer.

C'est vraiment cool que l'on puisse faire cela!

Je vous souhaite de passer d'excellentes fêtes de fin d'année à tous

Rechercher des sujets similaires à "selectionnez tableau que colonne soit vide"