Comment ajouter les valeurs dans la cellule suivante avec VBA

Bonjour

Voici quelque chose de paramétrable

Sub PlacerValeur(Feuille As String, PosColVerif As Integer, _PosColValeur As Integer, Valeur As Variant)' Feuille est le nom de la feuille souhaitée' PosColVerif est le numéro de colonne servant _à trouver la 1ere ligne disponible' PosColValeur est le numéro de la colonne _dans laquelle il faut placer la valeur' Valeur est la valeur à insérer dans la celluleDim Cellule As RangeSet Cellule = _Sheets(Feuille).Range(Cells(65536, PosColVerif), _Cells(65536, PosColVerif).End(xlUp))Sheets(Feuille).Cells(Cellule.Row, PosColValeur) = ValeurEnd Sub

Bonjour

Voici quelque chose de paramétrable

Lire aussi: Modifier Activité Kbis Auto-Entrepreneur

Sub PlacerValeur(Feuille As String, PosColVerif As Integer, _PosColValeur As Integer, Valeur As Variant)' Feuille est le nom de la feuille souhaitée' PosColVerif est le numéro de colonne servant _à trouver la 1ere ligne disponible' PosColValeur est le numéro de la colonne _dans laquelle il faut placer la valeur' Valeur est la valeur à insérer dans la celluleDim Cellule As RangeSet Cellule = _Sheets(Feuille).Range(Cells(65536, PosColVerif), _Cells(65536, PosColVerif).End(xlUp))Sheets(Feuille).Cells(Cellule.Row, PosColValeur) = ValeurEnd Sub

merci pour la réponse, mais mon problème essentiel est que je ne voudraispas avoir à modifier le code du programme appelant au cas où la colonne àmodifier changerait de position.

Rien ne 't'empêche d'appeler cette procédure avec des arguments faisantappel à des plages nommées

Ainsi, si ta colonne de test et ta feuille sont toujours les mêmes, et queseule la colonne de la cellule d'arrivée change, tu peux appeler laprocédure renseignée de la façon suivante :

PlacerValeur "Feuil1", 1 , range("Colonne"), Valeur

Lire aussi: INPI et Micro-Entreprise : Démarches

--Cela convient-il?

merci pour la réponse, mais mon problème essentiel est que je nevoudrais pas avoir à modifier le code du programme appelant au cas oùla colonne à modifier changerait de position.

Rien ne 't'empêche d'appeler cette procédure avec des arguments faisantappel à des plages nommées

Ainsi, si ta colonne de test et ta feuille sont toujours les mêmes, et queseule la colonne de la cellule d'arrivée change, tu peux appeler laprocédure renseignée de la façon suivante :

PlacerValeur "Feuil1", 1 , range("Colonne"), Valeur

Lire aussi: Comment Calculer la TVA ?

Problématique courante : automatisation sans modifier l'appelant

merci pour la réponse, mais mon problème essentiel est que je nevoudrais pas avoir à modifier le code du programme appelant au cas oùla colonne à modifier changerait de position.

Rien ne 't'empêche d'appeler cette procédure avec des arguments faisantappel à des plages nommées

Ainsi, si ta colonne de test et ta feuille sont toujours les mêmes, et queseule la colonne de la cellule d'arrivée change, tu peux appeler laprocédure renseignée de la façon suivante :

PlacerValeur "Feuil1", 1 , range("Colonne"), Valeur

Cas pratique : import de données et remplissage d'une colonne dérivée

Bonjour au forum,

J'importe régulièrement des données dans un fichier Excel (de la colonne A à la colonne I) via une macro et dans une colonne supplémentaire J, j'ai une formule RechercheV pour trouver la dénomination du code de mes cellules en colonne G.

Ma question est la suivante : Selon vous, quelle serait la meilleure manière de faire pour renseigner cette colonne J ?

  • Faut-il traiter la RechercheV plutôt via VBA à chaque import de données ?
  • Faut-il plutôt renseigner toutes mes cellules de la colonne J avec la formule pour qu'elle soit valable lors de chaque import ?
  • Faut-il boucler sur toutes les cellules de la colonne G ayant des données pour écrire en colonne J ?

Merci d'avance pour vos avis :)

Pour ma part, j'ai constaté qu'en fonction du volume des données, le RECHERCHEV peut être relativement lent surtout lorsqu'on utilise des filtres (recalcul à chaque changement du filtre ou effacement).

Si les données sont volumineuses et dans la mesure où elles sont importées via une macro pourquoi ne pas y ajouter une étape supplémentaire pour alimenter la dénomination du code ?

Je pense effectivement que je vais essayer de traiter ces infos directement lors de l'import par VBA, j'avais juste peur du temps que ça prendrait vu que les données sont très nombreuses.

Tu ferais comment ? Boucler sur chaque cellule de la colonne J et si vide, RECHERCHEV ?

Selon le type du fichier d'export, un traitement par le biais de Power Query pourrait être envisagé... (mais il faudrait un exemple du fichier)

En natif sur 365, en téléchargement gratuit sur le site de µSoft pour 2013.

Cela dépendrait de la manière dont les données sont importées et de la taille du référentiel de codification. Je crois comprendre que les données importées viennent s'ajouter aux données déjà existantes ?

Données importées en bloc => pas le choix, il faut boucler sur la colonne J après import. PowerQuery semble être une solution très intéressante pour la plupart des fichiers que je traite, mais je n'arrive pas à comprendre son fonctionnement, surtout pour l'automatisation, y'a rien à faire...

Techniques VBA recommandées et exemples

J'effectue une recherche avec "match" dans une colonne de base de données pour obtenir le N° de ligne (jusque là tout va bien) et je voudrais l'affecter à une variable pour désigner une cellule sur cette même ligne pour pouvoir y copier la valeur d'une autre cellule.

Tu pourrais expliquer ton problème ? A priori, pour ce que tu en dit, tu cherche une cellule et tu arrive a en déduire la ligne.

donc tu aurais deux solutions. cependant, comme dit gorfael avec justesse, plus ta question sera précise, plus la réponse pourra l'etre.

Utilisation d’instructions Pour Chaque... Instructions Suivantes

Les instructions Pour Chaque... Suivant répètent un bloc d’instructions pour chaqueobjet d’une collection ou pour chaque élément d’une gamme. Visual Basic définit automatiquementune variable à chaque exécution de la boucle. Utilisez une boucle For Each...Next pour parcourir toutes les cellules d’une plage.

Sortie anticipée d’une boucle Pour Chaque... L’instruction Pour Chaque... Suivant permet de sortir d’une boucle . Par exemple, lorsqu’une erreur se produit, utilisez l’instruction Sortir De dans le bloc d'instructions Vrai d’une instruction Si..Alors...Ou ou d’une instruction Sélectionner une Case contrôlant spécifiquement cette erreur.

Si l’erreur ne se produit pas, l’instruction Si... Alors... L’exemple suivant recherche la première cellule de la plage A1:B5 ne contenant pas un nombre.

Pour chaque... Les boucles suivantes ne se contentent pas d’itérer sur les tableaux et les instances de l’objet Collection .

Approche simple pour placer une valeur dans la cellule suivante libre

Sub PlacerValeur(Feuille As String, PosColVerif As Integer, _PosColValeur As Integer, Valeur As Variant)

' Feuille est le nom de la feuille souhaitée

' PosColVerif est le numéro de colonne servant à trouver la 1ere ligne disponible

' PosColValeur est le numéro de la colonne dans laquelle il faut placer la valeur

' Valeur est la valeur à insérer dans la cellule

Dim Cellule As Range

Set Cellule = Sheets(Feuille).Range(Cells(65536, PosColVerif), Cells(65536, PosColVerif).End(xlUp))

Sheets(Feuille).Cells(Cellule.Row, PosColValeur) = Valeur

End Sub

Cette routine trouve la dernière cellule non vide d'une colonne (en partant de la ligne 65536 pour compatibilité avec les anciennes versions) et écrit la valeur dans la colonne cible sur la même ligne.

Variantes et robustesse

  • Utiliser des plages nommées pour que l'appelant n'ait pas à modifier son code si la colonne d'arrivée bouge : PlacerValeur "Feuil1", 1, Range("Colonne"), Valeur.
  • Adapter la recherche de dernière ligne pour versions modernes : utiliser Rows.Count au lieu de 65536 pour compatibilité avec Excel 2007+.
  • Gérer les cellules vides initiales : si la colonne de vérification est entièrement vide, il faut écrire sur la première ligne utile (par exemple ligne 1 ou 2 selon votre en-tête).
  • Pour de gros volumes, privilégier le remplissage en bloc (boucle sur les données importées) plutôt que RECHERCHEV cellule par cellule.

Exemple d'appel flexible avec plage nommée

Rien ne t'empêche d'appeler cette procédure avec des arguments faisant appel à des plages nommées.

Ainsi, si ta colonne de test et ta feuille sont toujours les mêmes, et que seule la colonne de la cellule d'arrivée change, tu peux appeler la procédure renseignée de la façon suivante :

balises:

Articles populaires: