VBA - Programmer la composition d'une ligne
Résolu/Fermé
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
-
22 mars 2010 à 14:40
RussellD Messages postés 57 Date d'inscription jeudi 18 mars 2010 Statut Membre Dernière intervention 6 septembre 2010 - 2 avril 2010 à 13:51
RussellD Messages postés 57 Date d'inscription jeudi 18 mars 2010 Statut Membre Dernière intervention 6 septembre 2010 - 2 avril 2010 à 13:51
A voir également:
- VBA - Programmer la composition d'une ligne
- Aller à la ligne excel - Guide
- Site de vente en ligne particulier - Guide
- Partager photos en ligne - Guide
- Apparaitre hors ligne instagram - Guide
- Gps hors ligne - Guide
7 réponses
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
7
22 mars 2010 à 15:03
22 mars 2010 à 15:03
J'ai déjà trouver comment définir des cellules de couleurs, il suffit de rajouter une ligne du type Range("C" & lig).Interior.ColorIndex = 24 dans la boucle.
Pour rajouter une formule par contre, quelques problèmes ; je rajoute une ligne type Range("D" & lig).FormulaR1C1 = dans la boucle, mais je n'arrive pas à trouver une syntaxe correcte pour une formule qui utiliserait des valeurs rentrées précedemment dans la ligne (exemple, pour chaque ligne, on rentre une valeur dans la 1ere cellule, une 2eme dans la 2eme cellule, et la 3eme cellule multiplie directement les 2 et affiche le résultat).
J'essaye aussi de rentrer une liste déroulante dans les lignes qui apparaissent, pour le moment sans succès.
Si vous avez quelques conseils n'hésitez surtout pas ;) !
Pour rajouter une formule par contre, quelques problèmes ; je rajoute une ligne type Range("D" & lig).FormulaR1C1 = dans la boucle, mais je n'arrive pas à trouver une syntaxe correcte pour une formule qui utiliserait des valeurs rentrées précedemment dans la ligne (exemple, pour chaque ligne, on rentre une valeur dans la 1ere cellule, une 2eme dans la 2eme cellule, et la 3eme cellule multiplie directement les 2 et affiche le résultat).
J'essaye aussi de rentrer une liste déroulante dans les lignes qui apparaissent, pour le moment sans succès.
Si vous avez quelques conseils n'hésitez surtout pas ;) !
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
22 mars 2010 à 17:22
22 mars 2010 à 17:22
Bonjour
Pour la multiplication:
cad
cells(n° ligne, n° colonne)
.value est la propriété par défaut de l'objet "cellule": dans ce cas, on peut se dispenser de marquer .value
Evite les select selection très lents
pour éviter le scintillement de l'écran et gagner du temps d'exécution, on fige l'écran par
Pour la multiplication:
Range("C" & lig)=cells(lig,1)*cells(lig,2)
cad
cells(n° ligne, n° colonne)
.value est la propriété par défaut de l'objet "cellule": dans ce cas, on peut se dispenser de marquer .value
Evite les select selection très lents
With Rows(lig & ":" & lig + (CLng(nbLig) - 1)) .Insert Shift:=xlDown .Interior.ColorIndex = 27 .Borders.ColorIndex = 25 end with
pour éviter le scintillement de l'écran et gagner du temps d'exécution, on fige l'écran par
Application.screenupdating=false suivi de: With Rows(lig & ":" & lig + (CLng(....
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
7
1 avril 2010 à 17:12
1 avril 2010 à 17:12
Bonjour, merci pour cette réponse Michel
je me permet de reprendre le sujet pour une autre question, concernant la multiplication. Je met la formule
J'ai essayé de mettre la formule de multiplication juste apres la boucle, rien ne se passe...
Quelqu'un aurait-il une idée?
Je comptais faire un bout de code comme cela
qui, lorsque les cases 1 et 2 sont remplies (ne sont plus vides), exécute la multiplication, mais cela ne marche pas...
Merci par avance pour vos réponses !
je me permet de reprendre le sujet pour une autre question, concernant la multiplication. Je met la formule
Range("C" & lig)=cells(lig,1)*cells(lig,2)dans ma boucle For. Problème : une fois la boucle exécutée et les lignes créées, la cellule C ne se "souvient" plus de la formule, et j'ai beau rentrer des valeurs dans les 1eres et 2emes cellules, rien ne se passe.
J'ai essayé de mettre la formule de multiplication juste apres la boucle, rien ne se passe...
Quelqu'un aurait-il une idée?
Je comptais faire un bout de code comme cela
If Not Cells(lig, 1) And Cells(lig, 2) Is Nothing Then Range("C" & lig).Value = Cells(lig, 1) * Cells(lig, 2) End If
qui, lorsque les cases 1 et 2 sont remplies (ne sont plus vides), exécute la multiplication, mais cela ne marche pas...
Merci par avance pour vos réponses !
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
1 avril 2010 à 18:08
1 avril 2010 à 18:08
BOnjour,
cells(lig,1)*cells(lig,2) est effectuée lorsque tu exécutes la macro: VBA renvoie la valeur de la multiplication et non la formule
ainsi, si tu changes les valeurs le if n'est pas vérifié te range("C" & lig) ne bouge pas: il faut que tu relances la macro...
Elle peut être déclenchée automatiquement lors d'un changement de valeur dans activecell mais je me pose des questions sur l'emplacement dans la feuille de cette activecell: actuellement on peut déclencher la macro de n'importe où (attention si on déclenche activecell en colonne A ou B)
nota:Je ne connais pas ta demande de départ à laquelle t'a répondu Polux(bonjour)
cells(lig,1)*cells(lig,2) est effectuée lorsque tu exécutes la macro: VBA renvoie la valeur de la multiplication et non la formule
ainsi, si tu changes les valeurs le if n'est pas vérifié te range("C" & lig) ne bouge pas: il faut que tu relances la macro...
Elle peut être déclenchée automatiquement lors d'un changement de valeur dans activecell mais je me pose des questions sur l'emplacement dans la feuille de cette activecell: actuellement on peut déclencher la macro de n'importe où (attention si on déclenche activecell en colonne A ou B)
nota:Je ne connais pas ta demande de départ à laquelle t'a répondu Polux(bonjour)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
7
2 avril 2010 à 13:14
2 avril 2010 à 13:14
Bonjour,
la demande de départ, c'était une macro qui crée des lignes en fonction d'un nombre entré dans une cellule. Si on entre 3, 3 lignes sont créées, dans lesquels l'utilisateur entre ensuite des données. Mon but était que l'utilisateur entre une valeur dans la 1ere cellule, puis dans la 2eme, et qu'à ce moment le produit des deux se fasse et s'affiche dans la 3eme cellule. Et ce pour toutes les lignes créées.
Comme si on avait mis sous Excel dans la cellule C1 "=A1*B1"
Je vais essayer avec activcell comme tu me la suggéré, je te tiens au courant si j'arrive à un résultat satisfaisant.
la demande de départ, c'était une macro qui crée des lignes en fonction d'un nombre entré dans une cellule. Si on entre 3, 3 lignes sont créées, dans lesquels l'utilisateur entre ensuite des données. Mon but était que l'utilisateur entre une valeur dans la 1ere cellule, puis dans la 2eme, et qu'à ce moment le produit des deux se fasse et s'affiche dans la 3eme cellule. Et ce pour toutes les lignes créées.
Comme si on avait mis sous Excel dans la cellule C1 "=A1*B1"
Je vais essayer avec activcell comme tu me la suggéré, je te tiens au courant si j'arrive à un résultat satisfaisant.
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
7
2 avril 2010 à 13:42
2 avril 2010 à 13:42
J'ai une autre piste qui pourrait fonctionner, avec la formule :
Je la mettrai dans ma boucle, comme ça pour chaque itération la formule est affectée à la 3eme cellule de la ligne.
Problème : il faudrait qqch comme Range("C" & lig).Formula = "=Alig*Blig"
A et B sont toujours les mêmes, mais la ligne (définie par lig) est incrémentée de 1 à chaque boucle...
Comment définir ces deux cellules proprement en prenant compte de cette incrémentation?
J'ai essayé Range("C" & lig).Formula = "=Range("A" & lig) * Range("B" & lig)" mais ca ne marche pas, il me surligne le A en disant "attendu : fin d'instruction"...
J'espère avoir été clair... et que quelqu'un pourra me venir en aide ;-)
Range("C" & lig).Formula =
Je la mettrai dans ma boucle, comme ça pour chaque itération la formule est affectée à la 3eme cellule de la ligne.
Problème : il faudrait qqch comme Range("C" & lig).Formula = "=Alig*Blig"
A et B sont toujours les mêmes, mais la ligne (définie par lig) est incrémentée de 1 à chaque boucle...
Comment définir ces deux cellules proprement en prenant compte de cette incrémentation?
J'ai essayé Range("C" & lig).Formula = "=Range("A" & lig) * Range("B" & lig)" mais ca ne marche pas, il me surligne le A en disant "attendu : fin d'instruction"...
J'espère avoir été clair... et que quelqu'un pourra me venir en aide ;-)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
2 avril 2010 à 13:44
2 avril 2010 à 13:44
Ok,je comprend mieux
remplace
par ce que tu cherchais à faire au départ
a
remplace
Range("C" & lig).Value = Cells(lig, 1) * Cells(lig, 2)
par ce que tu cherchais à faire au départ
Range("C" & lig).FormulaR1C1 = "=RC[-2]*RC[-1]"
a
RussellD
Messages postés
57
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
6 septembre 2010
7
2 avril 2010 à 13:51
2 avril 2010 à 13:51
Génial !
Merci beaucoup pour cette réponse rapide et juste, c'est totalement ce que je cherchais. Il fallait donc passer par la formulation R1C1.
Merci encore du joli coup de main, à bientot !
Merci beaucoup pour cette réponse rapide et juste, c'est totalement ce que je cherchais. Il fallait donc passer par la formulation R1C1.
Merci encore du joli coup de main, à bientot !
22 mars 2010 à 15:51
Pour multiplier les 2 premières cellules dans la 3eme, je tape :
multiplication = Cells(A, lig) * Cells(B, lig)
Range("C" & lig).Value = multiplication
Mais la syntaxe pour multiplier les cellules n'a pas l'air bonne... Quelqu'un sait comment multiplier deux cellules en VBA?