Macro copie cellules

Résolu/Fermé
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 - 2 mars 2018 à 12:13
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 12 mars 2018 à 12:50


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:

3 réponses

ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
2 mars 2018 à 13:09


Petit aperçu de mon avancement jusqu'à maintenant et l'idée que je me fais du code à faire.
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
2 mars 2018 à 15:07
Début de code :

'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
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
2 mars 2018 à 15:10
Il faudra une boucle car la longueur de la ligne est variable au nombre de chargements.
Les variables auront plusieurs valeurs à chaque ligne.
Et il faut changer de ligne dans la feuille du bas pour chaque chargement.
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
2 mars 2018 à 16:46
Test pour une ligne saisie à la main fonctionne bien :

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
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
2 mars 2018 à 17:04
Peut-être une macro qui en appelle une autre pour pouvoir avoir des cellules variables en fonction de la ligne saisie.
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
6 mars 2018 à 14:27
Nouveau code, fonctionne bien dans l'idée mais reste à faire en sorte de ne copier qu'une partie de certaines cellules :

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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 mars 2018 à 16:46
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:

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!
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
6 mars 2018 à 16:54
Bonjour cs_Le Pivert,

Merci pour ta réponse.
Je vais lire et essayer de comprendre ça comme il faut pour pourvoir l'intégrer à mon macro.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 mars 2018 à 17:03
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



@+
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
6 mars 2018 à 17:11
Ha oui en effet je ne suis pas du tout familier avec les événements feuille.
Je vais voir si c'est plus clair avec un peu de lecture sur le sujet.

Merci.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 mars 2018 à 17:13
Sinon je t'envoie ton classeur!

Mais je pense que tu vas y arriver, ce n'est pas sorcier de faire Alt F11 sur ton interface pour accéder au module de ta feuille et y mettre ce code!
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
6 mars 2018 à 17:25
Oui merci j'ai bien copié ton code dans la partie Worksheet et ça fonctionne bien comme tu dis. Cela copie le nom du conducteur. Après j'essaie de comprendre le code aussi et voir si ça me convient comme solution :)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
6 mars 2018 à 17:23
Voir capture d'écran:


0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
7 mars 2018 à 10:13
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).
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 mars 2018 à 12:18
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

If Not Intersect(Target, Range("A3:A8"))


Voilà
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
Modifié le 7 mars 2018 à 17:15
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"
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.
0
ram43 Messages postés 25 Date d'inscription mardi 15 janvier 2013 Statut Membre Dernière intervention 12 mars 2018 54
7 mars 2018 à 17:08
Où j'en suis actuellement.

https://www.cjoint.com/c/HChqhO1yt5c
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
8 mars 2018 à 08:16
Je t'ai fait un exemple pour la macro Feuille2, tu verras la différence avec la tienne:

https://www.cjoint.com/c/HCihoSljkvQ


@+ Le Pivert
0