[VBA] Insertion formules avec variables
Résolu
Koozag
Messages postés
391
Date d'inscription
Statut
Membre
Dernière intervention
-
Koozag Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
Koozag Messages postés 391 Date d'inscription Statut Membre Dernière intervention -
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
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:
- [VBA] Insertion formules avec variables
- Formules - Télécharger - Études & Formations
- Insertion sommaire word - Guide
- Touche insertion clavier - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
13 réponses
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
Michel
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
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 à
=> L'indice n'appartient pas à la sélection.
De mon côté j'ai tenté de pondre quelque chose (on sais jamais ^^).
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 =)
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 =)
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...
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...
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 ... :-/
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 ... :-/
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+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
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
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+
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+
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):
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 !
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 !
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)
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)
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 !
=> 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 !
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)
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)