J'essaie de faire un résume d'un tableau pris sur un site, seulement j'en arrive a un tableau avec des lignes vides, parfois5 ou6 entre chaque lignes remplies.
Je cherche a copier les colonnes en evitant les lignes vides.
Vu que je dois le faire plein de fois (une cinquantaine), je cherche a ce que ça sot automatique et de préférence et temps réél.
En gros je cherche a savoir s'il existe une fonction qui copie la colonne A (Source) dans la colonne B (Cible) et s'il y a une cellule vide ou correspondant a un certain critère, excel l'ignore.
Ex : Si je fais dans la colonne B "=A:A", dans B1 J'aurais le contenu de A1, dans B2, le contenu de A2, je veux faire en sorte que si A2 est vide, B2 affiche le contenu de A3 (Sauf si elle est vide, dans ce cas la B2 affichera A4 etc.)
Mais s'il n'y a aucune solution je m'arrangerais avec le filtre (pas sympa puisqu'il faut le réactualiser a chaque fois que la collone source est modifiée)
Le test est composé de 2 conditions (chacune étant VRAI ou FAUX) multipliées entre elles par *, ce qui donne 1 ou 0 pour chaque terme de la matrice de test.
Si 1 (1 fonctionne comme VRAI), le terme de la matrice renvoyé est le n° de ligne correspondant.
Si 0 (0 fonctionne comme FAUX), le terme de la matrice renvoyé est FAUX.
L'expression renvoie donc une matrice xxx composée de n° de lignes et de FAUX.
2) PETITE.VALEUR(xxx;LIGNE()) renvoie la plus petite valeur zzz de cette matrice en ligne 1, puis la suivante en ligne 2, etc... (Les FAUX ne sont pas pris en compte par la fonction et ne gênent donc pas le calcul).
3) INDEX(A:A;zzz) permet d'obtenir la cellule en colonne A sur la ligne zzz.
4) Enfin le test SI(LIGNE()>NBVAL(A:A)-NB.SI(A:A;"X") au début de la formule permet de renvoyer un texte vide "" au lieu d'une valeur d'erreur.
Avec fonction perso (beaucoup + rapide) et moins gourmande en taille.
Code:
-Sélectionner C1:C1000
=sansvide(A1:A1000)
Valider avec Maj+ctrl+entrée
Function SansVide(champ As Range)
a = champ.Value
Dim b()
ReDim b(1 To champ.Count)
i = 1
For Each c In a
If c <> "" And c <> "x" Then
b(i) = c
i = i + 1
End If
Next c
SansVide = Application.Transpose(b)
End Function