Macro copie cellules
Résolu
ram43
Messages postés
25
Statut
Membre
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
cs_Le Pivert Messages postés 8437 Statut Contributeur -

Bonjour à tous,
Je viens voir si je peux trouver des renseignement utiles pour une macro que j'essaie de crée.
J'utilise surtout les macro auto mais avec ce que j'essaie de faire ça ne vas pas suffire je pense.
Comme on peut le voir sur l'image il s'agit un petit planning conducteur.
Pour avoir moins de saisie à faire je souhaiterais ne pas avoir à compléter à chaque fois la partie du bas qui est une feuille pour les conducteur qui reprend les informations dans les lignes en haut.
La partie du bas comprend 2 feuilles de conducteurs qui j'imprime ensuite.
Mon idée serai d'avoir une macro qui me permet avec un bouton par exemple de renseigner les cellules de la partie gauche de la feuille en bas et une autre macro, la même mais pour la partie droite.
Pour cela il faut que il y ai par exemple une boite de dialogue qui demande quelle ligne copier.
Aussi pour la cellule qui renseigne le nom du conducteur il faut garder que les lettres et pas le numéro de tel qui suit après sachant que le nombre de lettres n'est pas fixe.
Et bien attendu avec la copie des cellules ne copier que les valeurs et pas le format de la cellule copier.
Voilà voilà, si vous avez des idées je suis preneur. En attendent je vais voir ce que je peux faire déjà.
A voir également:
- Macro copie cellules
- Copie cachée - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
3 réponses
Bonjour,
Pour faire ce que tu veux, il suffit de se servir de l’événement Feuille BeforeDoubleClick
Tu fais Alt F11 pour allez dans le module de ta feuille 7 et mettre ce code qui se déclenchera au double clic sur les chauffeurs, les tracteurs et les remorques:
Voila, ya pas plus simple!
Pour faire ce que tu veux, il suffit de se servir de l’événement Feuille BeforeDoubleClick
Tu fais Alt F11 pour allez dans le module de ta feuille 7 et mettre ce code qui se déclenchera au double clic sur les chauffeurs, les tracteurs et les remorques:
Option Explicit Dim nom As String Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("A3:A8")) Is Nothing Then nom = Target.Value extractionMots Range("C23").Value = nom 'chauffeur End If If Not Intersect(Target, Range("B3:B7")) Is Nothing Then Range("C24").Value = Target.Value 'tracteur End If If Not Intersect(Target, Range("C3:C7")) Is Nothing Then Range("E24").Value = Target.Value 'remorque End If End Sub 'Extraire les données séparées par un espace dans une chaine de caractères Sub extractionMots() Dim Tableau() As String Dim i As Integer 'découpe la chaine en fonction des espaces " " 'le résultat de la fonction Split est stocké dans un tableau Tableau = Split(nom, " ") 'boucle sur le tableau pour visualiser le résultat For i = 0 To UBound(Tableau) 'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros Debug.Print Tableau(i) Next i nom = Tableau(0) 'nom du chauffeur seul End Sub
Voila, ya pas plus simple!
pour pourvoir l'intégrer à mon macro.
Tu n'as rien à integrer a tes macros!
c'est une macro qui se déclenche au double clic sur une cellule!
voir ceci pour mieux comprendre les événements feuille:
https://silkyroad.developpez.com/VBA/EvenementsFeuille/#LI
@+
Tu n'as rien à integrer a tes macros!
c'est une macro qui se déclenche au double clic sur une cellule!
voir ceci pour mieux comprendre les événements feuille:
https://silkyroad.developpez.com/VBA/EvenementsFeuille/#LI
@+
La Marco fonctionne plus ou moins bien. Sur certains cellules ça copie quand-même le numéro.
Je continue à essayer d'avoir une fonctionnalité similaire qui serait dans la macro que j'ai et qui copie tout d'un coup après une action sur le bouton. Pour la partie copier c'est bon, il me manque encore un moyen pour sélectionner qu'une partie de certaines cellules (que le nom du conducteur / pour le changement prendre tout avant ou après le premier espace).
Je continue à essayer d'avoir une fonctionnalité similaire qui serait dans la macro que j'ai et qui copie tout d'un coup après une action sur le bouton. Pour la partie copier c'est bon, il me manque encore un moyen pour sélectionner qu'une partie de certaines cellules (que le nom du conducteur / pour le changement prendre tout avant ou après le premier espace).
Sur certains cellules ça copie quand-même le numéro.
C'est normal si tu lis cela:
'Extraire les données séparées par un espace dans une chaine de caractères
Dans mon exemple j'ai mis 3 espaces pour aller avec les premières ligne. Mais par la suite tu as des numéros qui sont collés au nom!
Cela ne peut fonctionner
en vba il faut être rigoureux et faire les saisies dans le cellules correctement.
Le code que je t'ai donné est le plus efficace pour ce que tu veux faire.
Il va falloir que tu corriges tes cellules en mettant le même nombre d'espaces dans chacunes d'elles.
J'ai mis cela aussi, cela s’arrête en A8, il faut le corriger en mettant la dernière cellule saisie dans la colonne
Voilà
C'est normal si tu lis cela:
'Extraire les données séparées par un espace dans une chaine de caractères
Dans mon exemple j'ai mis 3 espaces pour aller avec les premières ligne. Mais par la suite tu as des numéros qui sont collés au nom!
Cela ne peut fonctionner
en vba il faut être rigoureux et faire les saisies dans le cellules correctement.
Le code que je t'ai donné est le plus efficace pour ce que tu veux faire.
Il va falloir que tu corriges tes cellules en mettant le même nombre d'espaces dans chacunes d'elles.
J'ai mis cela aussi, cela s’arrête en A8, il faut le corriger en mettant la dernière cellule saisie dans la colonne
If Not Intersect(Target, Range("A3:A8"))
Voilà
J'apprécie tes conseils.
Je ne suis pas l'auteur du document, j'essaie de réduire le temps de saisie que j'ai à faire dessus.
Quand ça sera possible je pourrais adapter le tableur et la saisie des cellules ce qui n'est pas le cas aujourd'hui.
J'ai une vingtaine de lignes alors j'ai rallongé jusqu'à "A25"
Je n'ai pas encore saisie comment fonctionne l'ensemble de ton code.
J'ai vu que le code permet avec un double-clic de copier et coller une cellule dans une autre.
Et que avec la fonction Split on arrive à garder qu'une partie des caractères.
Cependant j'ai surement pas saisie toute les fonctionnalités de ta macro et son efficacité. Car ce que j'ai cherché à faire avec la macro que j'ai édité moi même c'est d'avoir une copie de toutes les cellules dont j'ai besoin en un clic.
Merci pour ta patience et tes réponses.
Je ne suis pas l'auteur du document, j'essaie de réduire le temps de saisie que j'ai à faire dessus.
Quand ça sera possible je pourrais adapter le tableur et la saisie des cellules ce qui n'est pas le cas aujourd'hui.
J'ai une vingtaine de lignes alors j'ai rallongé jusqu'à "A25"
If Not Intersect(Target, Range("A3:A25")) Is Nothing Then
Je n'ai pas encore saisie comment fonctionne l'ensemble de ton code.
J'ai vu que le code permet avec un double-clic de copier et coller une cellule dans une autre.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Et que avec la fonction Split on arrive à garder qu'une partie des caractères.
Tableau = Split(nom, " ")
Cependant j'ai surement pas saisie toute les fonctionnalités de ta macro et son efficacité. Car ce que j'ai cherché à faire avec la macro que j'ai édité moi même c'est d'avoir une copie de toutes les cellules dont j'ai besoin en un clic.
Merci pour ta patience et tes réponses.
'Macro_3
'Copie des valeur d'une ligne de tournée dans les cellules pour la fiche conducteur
'Bouton pour activer macro
'Début de la procédure
Sub Macro_3()
'Test marco pas à pas F8
MsgBox ("Test macro pas à pas F8")
'Déclaration des variables
Dim Ligne As Integer
Dim Conducteur As String
Dim HeureEmbauche As Variant
Dim Tracteur As Variant
Dim Remorque As Variant
Dim Chargement As String
Dim Lieu As String
Dim Horaire As Variant
Dim DateJour As Date
'Affectation des variables
DateJour = Range("B1").Value
Ligne = InputBox("quelle ligne copier?")
'While x
'Affecataion des cellules
'Date
Range("B22").Value = DateJour
'Entete
Range("C23").Value
Range("E23").Value
Range("C24").Value
Range("E24").Value
'Chargement
Range("B26").Value
Range("C26").Value
Range("E26").Value
'Début de la boucle
'If
'Si ligne x alors cellules y
'Affecter valeur varaibles (copier valeur de la ligne x)
'Affectetation des
'Endif
'Variable :
'ligne à copier
'cellules à copier
'
'copier les que lettres cellule conducteur
'suprimer suffixe vide et espace cellule chargement
'
'Boite de dialogue numero ligne
'Copier cellule x si ligne y
'
'Messqge de sortir
MsgBox ("Programme terminé")
'fin de la procédure
End Sub
Les variables auront plusieurs valeurs à chaque ligne.
Et il faut changer de ligne dans la feuille du bas pour chaque chargement.
Sub COPIE()
'Déclaration des variables
Dim DateJour As Date
Dim Ligne As Integer
Dim Conducteur As String
Dim HeureEmbauche As Variant
Dim Tracteur As Variant
Dim Remorque As Variant
Dim Chargement As String
Dim Lieu As String
Dim Horaire As Variant
'Affectation des variables
DateJour = Range("B1").Value
Ligne = InputBox("quelle ligne copier?")
'copier les que lettres cellule conducteur
'suprimer suffixe vide et espace cellule chargement
'Copier cellule x si ligne y
'Début de la boucle
'Si Ligne = x
'Alors Varaibles du chargement sont y
'If
'Si ligne x alors cellules y
'Affecter valeur varaibles (copier valeur de la ligne x)
'Endif
'Affectation des variables en fonction de la variable ligne
Conducteur = Range("A3").Value
Tracteur = Range("B3").Value
Remorque = Range("C3").Value
HeureEmbauche = Range("D3").Value
'Affectation des variables en fonction du chargement
Chargement = Range("I3").Value
Lieu = Range("I3").Value
Horaire = Range("H3").Value
'While x = non vide
'nouvelle boucle pour nouvelle ligne de chargement
'Affecataion des cellules
'Date
Range("B22").Value = DateJour
'Entete feuille
Range("C23").Value = Conducteur
Range("E23").Value = HeureEmbauche
Range("C24").Value = Tracteur
Range("E24").Value = Remorque
'Faire une boucle pour les chargement avec saut d'une ligne pour un nouveau chargement
'Chargement 1
Range("B26").Value = Chargement
Range("C26").Value = Lieu
Range("E26").Value = Horaire
'Chargement 2
Range("B28").Value = Chargement
Range("C28").Value = Lieu
Range("E28").Value = Horaire
'Chargement 3
Range("B30").Value = Chargement
Range("C30").Value = Lieu
Range("E30").Value = Horaire
'Message de sortie
MsgBox ("Données copiées")
'fin de la procédure
End Sub
Sub FEUILLE1()
'Sauvegarder du fichier avant modification par la maccro
'ActiveWorkbook.Save
'Déclaration des variables
Dim DateJour As Date
Dim Ligne As Integer
Dim i As Integer
Dim Conducteur As String
Dim HeureEmbauche As Variant
Dim Tracteur As Variant
Dim Remorque As Variant
Dim Chargement As String
Dim Lieu As String
Dim Horaire As Variant
i = 3
'Affectation des variables
DateJour = Range("B1").Value
i = InputBox("quelle ligne copier?")
ActiveWindow.Panes(1).Activate
Columns("A:W").Rows(i).Select
'copier les que lettres cellule conducteur
'suprimer suffixe vide et espace cellule chargement
'Début de la boucle
'Demande de confirmation pour vider la feuille
If MsgBox("Copier la ligne?", vbYesNo, "Demande de confirmation") = vbYes Then
'Affectation des variables en fonction de la variable ligne
Conducteur = Range("A" & i).Value
Tracteur = Range("B" & i).Value
Remorque = Range("C" & i).Value
HeureEmbauche = Range("D" & i).Value
'Affectation des variables en fonction du chargement
Chargement = Range("I" & i).Value
Lieu = Range("I" & i).Value
Horaire = Range("H" & i).Value
'Affecataion des cellules
'Date
Range("B22").Value = DateJour
'Entete feuille
Range("C23").Value = Conducteur
Range("E23").Value = HeureEmbauche
Range("C24").Value = Tracteur
Range("E24").Value = Remorque
'Faire une boucle pour les chargement avec saut d'une ligne pour un nouveau chargement
'Chargement 1
Range("B26").Value = Chargement
Range("C26").Value = Lieu
Range("E26").Value = Horaire
'Chargement 2
Range("B28").Value = Chargement
Range("C28").Value = Lieu
Range("E28").Value = Horaire
'Chargement 3
Range("B30").Value = Chargement
Range("C30").Value = Lieu
Range("E30").Value = Horaire
End If
'Message de sortie
MsgBox ("Données copiées")
'fin de la procédure
End Sub