Envoyé par
gabvba
Je peux t' envoyer un fichier si tu peux me communiquer une adresse mail.
Non, maéis tu peux le joindre après l'avoir "Zippé" (icône trombone)
Pour ton pb, je ne vois guère d'autre solution que celle-ci
Déterminer quel est la dernière colonne renseignée de ta base, quelque soit le N° de ligne, texte ou nombres confondus. Tu ajoutes 2 à ce No de colonne :
1 2
| DerniereColonne = Range("A1").SpecialCells(xlCellTypeLastCell).Column
NewCol = DerniereColonne + 2 'On garde DerniereColonne pour plus tard |
C'est sur cette colonne que tu mettras la première colonne des nombres.
Ensuite,
Envoyé par
Tu
suivi d' un nombre (a peu pres) fixe de cellules de nombres
Ce n'est pas un nombre fixe, donc d'un nombre indéterminé de cellules de nombres
Tu détermines la dernière ligne renseignées de ta feuille
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Maintenant, tu peux parcourir la feuille ligne par ligne pour repérer les cellutes contenant les valeurs et les coller au bon endroit
1 2 3 4 5 6 7 8 9 10 11 12
| 'd'après la structure de ta base, tu n'as pas d'entête -> on commence à la ligne 1
For NoLigne = 1 to DerniereLigne
ColNum = NewCol
'ColNum sera le No de colonne de la dernière "valeur" rencontrée sur la ligne
For NoCol = 1 to DerniereColonne 'parcours de la ligne col par col
If cells(NoLigne,NoCol).value <> 0 then
Cells(NoLigne,ColNum) = cells(NoLigne,NoCol)
ColNum = ColNum + 1 'on incrémente le No de la colonne "Coller"
Cells(NoLigne,ColNum) = "" ' On nettoie la cellule (voir plus loin **)
endif
Next
Next |
Ainsi les "valeurs" ont toutes été collées à partir de la colonne NewCol
Pour coller le texte sur la colonne suivant les nombres, il ne te reste plus qu'à connaître la première colonne vide après les nombres : on reprend la formule de tout à l'heure
NewCol = Range("A1").SpecialCells(xlCellTypeLastCell).Column + 1
On copie la plage ne contenant plus que le texte. Et comme en faisant NewCol = DerniereColonne + 2, on a isolé le texte des nombres par une colonne vide, on peut donc utiliser CurrentRegion pour déterminer la plage du texte (puisqu'on a nettoyé les cellules des nombres) il ne reste qu'à le faire
Range("A1").currentRegion.copy destination:=Range(1,NewCol)
Il ne te reste plus qu'à supprimer les colonnes copiées (**) et là encore, comme tout à l'heure on a pris pour 1ère colonne des nombres DernièreColonne + 2, on peut supprimer les colonnes de A à DerniereColonne + 1
Range(Cells(1, 1).Column & ":" & Cells(1, DerniereColonne+1).Column).Delete Shift:=xlToLeft
Je réalise que j'ai tout fait...
Bien sûr je n'ai pas testé, alors fais ça pour moi mais sur une copie de ton fichier
A+
Partager