Macro excel mise en forme

Fermé
matbleu - 22 nov. 2012 à 16:10
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 23 nov. 2012 à 14:03
Bonjour,


J'ai besoin d'un coup de main pour terminer un fichier excel...

J'ai fait la macro suivante qui fonctionne très bien :

With Sheets(4)
.Range("AC5:AC27").Value = WorksheetFunction.VLookup(.Range("B5:B27").Value, Sheets(11).Range("C3:I24"), 7, False)
End With

End Sub


sauf que :

Problème 1 : AC5:AC27 est en réalité variable...ce mois ci c'est la colonne AC mais le mois prochain mes données doivent venir à la suite du tableau c'est à dire en AD et ainsi de suite chaque mois...
comment lui dire de coller les données sur la dernière colonne vide...en utilisant une dimension?


j'ai également besoin de mettre en forme cette colonne créée au format de la précédente (ou plus simplement au format de la colonne C si c'est plus facile à faire)

aussi, j'ai besoin d'un TOTAL pour la colonne ajoutée...il sera toujours sur la ligne 28...=somme(AC5:AC27) ce mois ci par exemple...

enfin, il se peut que des #N/A apparaissent avec le vlookup s'il ne trouve rien...je souhaite qu'il les remplace ces #N/A par 0


Merci beaucoup de votre aide ...
A voir également:

2 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 00:10
1) Quand tu dit: comment lui dire de coller les données sur la dernière colonne vide...en utilisant une dimension? , tu veux dire "première colonne vide ? si oui, alors:
DernCol = (Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1)
2) exemple: tu te place sur la cellule qui va recevoir le total, ex, "AC28", et tu fait:
    Range("AC28").Select ' rend la cellule "AC28" active
    ActiveCell.FormulaR1C1 = "=SUM(R[-23]C:R[-1]C)"
0
bonjour et merci de ton aide...voilà ou j'en suis :

With Sheets(4)
.Range("AC5:AC27").Value = WorksheetFunction.VLookup(.Range("B5:B27").Value, Sheets(11).Range("C3:I30"), 7, False)
End With

Sheets(4).Select
Range("AC28").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-23]C:R[-1]C)"

Cells.Replace What:="#N/A", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub


Pour résumer, j'ai compris comment fonctionnait la fonction somme et j'ai trouvé comment remplacer mes #N/A par zéro mais je n'arrive toujours pas à adapter cette macro à mes variables, à savoir :

1) AC5:AC27 doit être remplacé par 1ère colonne vide à droite du tableau

2) AC28 se déplace également tous les mois d'une colonne...


merci d'avance pour ton coup de main
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 11:38
D'abord, on parle en français, ce qui donne:
1) rechercher la dernière colonne non-vide,
2) une fois la valeur récupérée, lui ajouter 1 pour évaluer et écrire dans la première colonne vide,
3) comme tu as déjà le numéro de la colonne, tu fais la somme, et tu l'écris à la ligne 28 de cette colonne
Est-ce correct ? ou
1) rechercher la dernière colonne non-vide,
2) évaluer et écrire dans la première colonne vide,
3) comme tu as déjà le numéro de la colonne, tu fais la somme, et tu l'écris à la ligne 28 de cette colonne

La différence entre les 2 solutions, au cas où tu ne le percevrais pas, c'est que, dans la 1ère solution, tu viens écrire toutes les données ET faire la somme dans la première colonne vide, et,
dans la 2èmes solution, tu as déjà les données de la dernière colonne, mais tu veut uniquement faire la somme de XX5 à XX27 dans la cellule de XX28 ??
0
merci pour ta réponse rapide...

Je suis dans le 1er cas : ce qui donne:
1) rechercher la dernière colonne non-vide,
2) une fois la valeur récupérée, lui ajouter 1 pour évaluer et écrire dans la première colonne vide,
3) comme tu as déjà le numéro de la colonne, tu fais la somme, et tu l'écris à la ligne 28 de cette colonne
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
23 nov. 2012 à 14:03
Rechercher dernière colonne non-vide, definir la colonne juste après (première colonne vide:
DernCol = (Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1) 
Ecrire dans les cellules via une boucle:
For i = 5 to 27
	Cells(i, DernCol).Value = ValeurAEcrire
Next i
Calculer et écrire la somme dans la cellule de la ligne 28:
Range(Cells(28, DernCol), Cells(28, DernCol)).Select
ActiveCell.FormulaR1C1 = "=SUM(R[-23]C:R[-1]C)"

voilà
0