[VBA] Insertion formules avec variables

Résolu/Fermé
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 - 18 oct. 2010 à 10:39
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 - 19 oct. 2010 à 14:07
Bonjour,

je suis actuellement en train d'automatiser un processus pour la gestion des licences de logiciels avec Excel. Les données traitées avoisinent les 7000 lignes.
J'ai peur de ne pas avoir assez de connaissances dans ce langage pour m'en sortir seul...
Exemple de fichier :
Dans une feuille excel, j'ai diverses données, par exemple le nom d'ordinateur et le login associé, j'aimerais que dans une troisième colonne il y ai une concaténation de ces données.
Par exemple, en A j'ai : ORDI1 ORDI2 ....
en B j'ai : LOGIN1 LOGIN2 .....
j'aimerais avoir en C : ORDI1-LOGIN1 ORDI2-LOGIN2 ....
la formule en graphique est : =B3&"-"&A3, j'aimerais l'intégrer avec VBA mais en changeant le chiffre par une variable "i", donc en quelque sorte : =Bi&"-"$Ai je ne sais pas si c'est envisageable sinon comment le contourner.
j'utilise i pour compter le nombre de ligne avant d'arriver aux dernières lignes non vides.

Dans un second temps, j'aimerais si possible savoir comment exécuter le code sur une autre feuille, car j'ai mes boutons d'exécution sur une feuille "Auto" et j'aimerais que cela s'exécute sur la feuille "Temp", comment est-ce que cela se traduit dans ce langage ?

Merci d'avance pour votre patience et votre aide.

Cordialement


A voir également:

13 réponses

michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié par michel_m le 18/10/2010 à 11:53
Bonjour,

pas compris :

Dans un second temps, j'aimerais si possible savoir comment exécuter le code sur une autre feuille, car j'ai mes boutons d'exécution sur une feuille "Auto" et j'aimerais que cela s'exécute sur la feuille "Temp", comment est-ce que cela se traduit dans ce langage ?

ton tableau ordi-login se trouve sur quelle feuille?

en attendant 1° partie de ta question (7000lignes==> utilisation d'un array pour rapidité)
Dans une feuille excel, j'ai diverses données, par exemple le nom d'ordinateur et le login associé, j'aimerais que dans une troisième colonne il y ai une concaténation de ces données

Sub concaténer()
Dim deplig As Byte, derlig As Integer
Dim tablo() As String

deplig = 2 'ligne de départ (a adapter)
derlig = Range("A10000").End(xlUp).Row

ReDim tablo(derlig - deplig)

For cptr = deplig To derlig
    tablo(cptr - deplig) = Cells(cptr, 1) & "-" & Cells(cptr, 2)
Next

Range("C2:C" & derlig) = Application.Transpose(tablo)

End Sub

Michel
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
18 oct. 2010 à 12:06
Merci pour ta réponse.
Alors, en fait mon tableau ordi-login se trouve sur la feuille "Temp", les boutons d'exécution qui sont associés au code sont sur la feuille "Auto".

En ce qui concerne le bout de code que tu m'as donné j'ai une erreur à
ReDim tablo(derlig - deplig)

=> L'indice n'appartient pas à la sélection.

De mon côté j'ai tenté de pondre quelque chose (on sais jamais ^^).

 'code vu sur Internet
Dim dernière, Ligne As Integer
Range("a1").Select
Set wrksht = ActiveWorkbook.Worksheets("Temp")
   'Pour chaque colonne de 1 à 12
For i = 1 To 12
    ' on détermine à partir du bas, le rang de la dernière cellule non vide
Ligne = Sheets(8).Cells(65530, i).End(xlUp).Row
  
    'si le rang trouvé est supérieur au plus grand précédent, "dernière" prend cette valeur:
If Ligne > dernière Then dernière = Ligne
Next i

 'code que j'ai créer
For i = 2 to dernière
 Sheets(8).Cells(1, 3).Value = "=B2&'-'&A2"

Next i


Le problème que j'ai ici c'est que la cellule passe en texte et affiche =B2&'-'&A2 et non la formule ...

Merci encore Michel pour ton aide =)

0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
18 oct. 2010 à 12:28
pourquoi veux tu absolument transformer en formule alors qur tu as une liste donnée (ordi-login)

et je croyais que tu voulais A2(ordi) et B2(login et non B2 A2

Si c''est sur la m^me feuille tu n'as pas besoin de VBA m^me pour 7000 lignes

tu écris en C2 ta formule et tu double-clic sur le carré noir en bas et à droite: tu auras ta formule recopiée sur les 7000 lignes...
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
18 oct. 2010 à 13:13
Oui c'est possible comme ça mais mon maitre d'oeuvre veut que ça soit tout automatisé sans intervention de l'utilisateur ...
Après je ne veux pas forcément transformer, je veux afficher le bon résultat par n'importe quel moyen, celui du double-clic est bon aussi mais requiert l'intervention de la personne ... :-/
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
18 oct. 2010 à 13:30
Bonjour,
Bonjour Michel, excuse l'incruste c'est juste pour suggérer une autre piste.
Si j'ai bien compris, tes feuilles sont déjà remplie avec 7000 lignes mais ça peu changer... si oui, ma suggéstion..
1°) Coller la formule sur toutes les lignes existante.
2°) Faire un copier/Coller des valeurs pour éliminer les formules.
3°) Mettre une macro dans le SheetsChange qui détecte la modif dans ces colonnes et écrit le résultat dans la bonne colonne.
Avec cette solution se sera tout a fait automatique (sans intervention de l'utilisateur).
Je quitte :-)
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
18 oct. 2010 à 13:36
Salut lermite222, merci à toi de m'aider également

En fait ma feuille est déjà remplie de 7000 lignes avec 7 colonnes.
Parmi ces 2 colonnes il y en a une (la A) qui contient les nom d'ordinateurs et une autre (la B) qui contient les logins des utilisateurs.
J'aimerais qu'une troisième colonne (la C) contienne la concaténation de ces 2 valeurs.

Je ne connais pas le SheetsChange, donc je ne sais pas si cela peut fonctionner, je vais essayer tout ça mais avec le processus que j'ai cela ne risque pas de fonctionner mais je vais essayer ;-)
Merci encore
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
18 oct. 2010 à 14:02
puisque tu tiens tant à mettre une formule ( je ne saurais jamais pourquoi mais je ne vais pas passer ma vie là dessus de m^me que tu demandes ordi-login et que ton essai indique login-ordi....)

voici un exemple d'écriture de ta formule en VBA
Cells(cptr, 3).Formula = "=A" & cptr & "&""-""&B" & cptr

cptr au lieu de "i" 'les variables à 1 lettre sont à éviter dans la plupart des cas

abandon du suivi
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
18 oct. 2010 à 15:09
L'ordre entre login-ordi n'a pas réel importance à vrai dire je me suis surement embrouillé.
Après la formule je ne suis pas forcément bridé à ça je n'avais que ça en tête à ce moment pour une automatisation...
Merci pour l'astuce du cptr.
Le code fonctionne très bien en tout cas, sauf qu'il n'affiche pas un résultat de formule mais du texte en brut ...
En tout cas merci michel
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
18 oct. 2010 à 16:25
Mais qu'est que tu veux en définitive,
Le code fonctionne très bien en tout cas, sauf qu'il n'affiche pas un résultat de formule mais du texte en brut
Pourquoi une formule alors que le résultat est bon ???
Si non explique un peu mieux ton cas parce que, comme Michel le dis (plus poliment), ca commence à bien faire...
A+
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
18 oct. 2010 à 16:32
C'est bon je me suis arrangé pour arranger votre code.
Eeee par contre l'animosité je comprend pas pourquoi, j'essaie vraiment d'être le plus clair possible et d'essayer de ne pas trop m'écarter du problème !

Faut aussi comprendre que le VBA n'est pas un langage à la portée de tout le monde, et je ne pense pas avoir été benêt ou autre dans mes explications!

Pour clore ce sujet, j'aimerais savoir s'il est possible de mettre une variable à cette endroit (texte en gras):
    Selection.AutoFill Destination:=Range("C2:C6973")

en clair j'aimerais que la dernière cellule soit une variable "derniere" car les stats évoluent rapidement.

Si je vous ai gavé, tan pis, j'attendrais, je passerais ce post en résolu se soir.

Merci encore !
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
Modifié par lermite222 le 18/10/2010 à 16:51
Le gros problème vois-tu, c'est qu'ont te pose des questions et que tu n'y répond pas.
ton tableau ordi-login se trouve sur quelle feuille?

pourquoi veux tu absolument transformer en formule alors qur tu as une liste donnée (ordi-login)

Pourquoi une formule alors que le résultat est bon ???

Si non explique un peu mieux ton cas


Aucune des ces quetions n'a eu de réponse..
Et tu t'étonne de la réaction ??
Et malgrè ça ont a essayés de t'aider, que te faut-il de plus.
Pour ta dernière question.. la réponse dépendra de ta réaction.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
19 oct. 2010 à 08:13
ton tableau ordi-login se trouve sur quelle feuille?
=> Alors, en fait mon tableau ordi-login se trouve sur la feuille "Temp", les boutons d'exécution qui sont associés au code sont sur la feuille "Auto".

pourquoi veux tu absolument transformer en formule alors qur tu as une liste donnée (ordi-login)
=> Après la formule je ne suis pas forcément bridé à ça je n'avais que ça en tête à ce moment pour une automatisation...

Pourquoi une formule alors que le résultat est bon ???
=> Le résultat est bon c'est simplement la mise en forme qui n'est pas correcte mais cela vient d'excel et non du code!

Sinon les réponses je les ai donné, voir ci dessus donc je suis pas de mauvaise foi, après le principe actuel de CCM c'est l'entraide, et comme j'ai précisé au tout début VBA est un langage que je ne connais pas, je ne suis pas non plus ignorant dans l'informatique !
Donc oui je m'étonnes de la réaction, maintenant au risque de te froissé, tu t'es pris la mouche assez rapidement, j'suis pas un pigeon, j'ai demandé de l'aide dans les règles j'ai essayé que ce topic ne traine pas trop en restant présent et en essayant de facilité sa résolution !
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
Modifié par lermite222 le 19/10/2010 à 13:00
rE?
Tu avais marquer en résolu mais suis certain que ce n'est pas le cas.
Ta demande était "d'automatiser" donc il découle de source que des lignes peuvent être ajoutées ou modifiées ?
Répond à cette question (que j'ai déjà poser plus haut) et j'expliquerais comment faire.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
Koozag Messages postés 391 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 31 janvier 2013 50
19 oct. 2010 à 14:07
Ma demande principale était de pouvoir gérer l'insertion d'une formule dans une ligne de façon variable, la ligne de michel fonctionne.
Cells(cptr, 3).Formula = "=A" & cptr & "&""-""&B" & cptr 

J'ai bouclé cette ligne jusqu'à ma dernière ligne et c'est tout bon !

D'où le passage en "Résolu".
0