XL 2021 Ecrire dans une autre feuille cas trop compliqué pour moi

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous :)

Début octobre, j'avais créé un fil pour "Ecrire dans une une autre feuille.

Mon Cher Gérard (job75) a eu la gentillesse de me fournir la solution, encore merci à toi :)
J'avais pensé que je pourrais l'appliquer en l'adaptant à mon besoin.

Que nenni lol, malgré toutes mes tentatives, je n'y arrive pas (mes neurones ne suivent pas :))
Il est vrai que mon besoin est ardu (enfin pour moi)

Je me permets de vous le soumettre en espèrant que vous pourrez m'aider...
A partir de la feuille Appels "CELLULE "ACTIVE"
Mon besoin
: Je voudrais envoyer certaines des informations contenues dans cette cellule dans ma feuille "RdV_transfert TEST" NON ACTIVE

Dans le classeur joint, j'ai détaillé mon besoin dans la feuille "Besoin"
J'ai tenté de coller ici mais je n'arrive pas à présenter de façon claire et compréhensive, c'est pourquoi, si vous le voulez bien, je vous remercie de télécharger le classeur.

Espérant votre attention pour ma demande, je vous en remercie par avance.
Entre temps, je continue mes élucubrations comme dirait Antoine lol :)
 

Pièces jointes

  • 01 Appels vers transfert.xlsm
    28.3 KB · Affichages: 2
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Un milliard de fois qu'on te dit que le Select est fortement déconseillé, et donc le ActiveCell aussi. ;)

Pour écrire dans une cellule, tu peux utiliser Range("A1") (par exemple Range("A1").Value="Salut !"), qui va écrire dans la feuille active.

Tu peux aussi utiliser .Range("A1") qui va utiliser la feuille définie dans With (par exemple With Sheets("Feuil1") pour écrire dans la feuille nommée "Feuil1").

Une fois que tu sais ça, tu peux écrire (et lire) dans la cellule de la feuille que tu veux. ;)



Tu peux aussi écrire dans des plages nommées ou dans des TS, ainsi pas besoin de s'occuper de la feuille où ça se trouve.




Une astuce qui va te plaire : si tu n'es pas sûr de toi et donc pas certain de taper au bon endroit, avant d'écrire ou de lire, tu peux commencer par un... Select (mais juste le temps de contrôler que tu tapes bien à l'endroit que tu veux).


Bon week-end
🖖
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Un milliard de fois qu'on te dit que le Select est fortement déconseillé, et donc le ActiveCell aussi. ;)

Pour écrire dans une cellule, tu peux utiliser Range("A1") (par exemple Range("A1").Value="Salut !"), qui va écrire dans la feuille active.

Tu peux aussi utiliser .Range("A1") qui va utiliser la feuille définie dans With (par exemple With Sheets("Feuil1") pour écrire dans la feuille nommée "Feuil1").

Une fois que tu sais ça, tu peux écrire (et lire) dans la cellule de la feuille que tu veux. ;)



Tu peux aussi écrire dans des plages nommées ou dans des TS, ainsi pas besoin de s'occuper de la feuille où ça se trouve.
Bjr à toi, j'avais oublié d'enlever le code dans une feuille , j'ai remis le fichier sans codes lol :)
 

job75

XLDnaute Barbatruc
Bonsoir Lionel, TooFatBoy,

Dans ce problème il ne s'agit pas de traiter la cellule active mais de transférer toutes les données d'une feuille dans une autre.

Pour cela il faudra placer une macro Worksheet_Activate dans la feuille "RdV_transfert TEST".

Ensuite en utilisant la fonction Split on extraira les données de la colonne A vers les colonnes B à K.

Mais justement dans le résultat attendu les numéros de téléphone des colonnes G I K ne se retrouvent pas en colonne A, il faut revoir cette question.

A+
 

job75

XLDnaute Barbatruc
Voici la macro traitant toute la colonne mais sans récupérer les 3 numéros de téléphone :
VB:
Private Sub Worksheet_Activate()
Dim tablo, i&, s
Application.ScreenUpdating = False
On Error Resume Next 'si des recherches n'aboutissent paz
Rows("3:" & Rows.Count).Delete 'RAZ
With Sheets("Appels")
    .Range("O3:O" & .Cells.SpecialCells(xlCellTypeLastCell).Row).Copy [A3] 'copier-coller
End With
With Me.UsedRange
    .WrapText = True 'renvoi à la ligne
    .Rows.AutoFit 'ajustement hauteur
    tablo = .Columns(1).Resize(, 11) 'matrice, plus rapis
    For i = 3 To UBound(tablo)
        s = Split(tablo(i, 1), " - ")
        tablo(i, 2) = Right(s(9), 16)
        tablo(i, 3) = CDate(Left(s(9), 8))
        tablo(i, 6) = Trim(Split(s(0), ":")(1))
        tablo(i, 8) = s(2)
        tablo(i, 10) = Trim(Split(s(0), ":")(0))
    Next
    .Value = tablo 'restitution
End With
End Sub
J'attends toujours les explications pour les numéros de téléphone.

Bonne nuit.
 

Pièces jointes

  • 01 Appels vers transfert.xlsm
    37.5 KB · Affichages: 2

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Voici la macro traitant toute la colonne mais sans récupérer les 3 numéros de téléphone :
VB:
Private Sub Worksheet_Activate()
Dim tablo, i&, s
Application.ScreenUpdating = False
On Error Resume Next 'si des recherches n'aboutissent paz
Rows("3:" & Rows.Count).Delete 'RAZ
With Sheets("Appels")
    .Range("O3:O" & .Cells.SpecialCells(xlCellTypeLastCell).Row).Copy [A3] 'copier-coller
End With
With Me.UsedRange
    .WrapText = True 'renvoi à la ligne
    .Rows.AutoFit 'ajustement hauteur
    tablo = .Columns(1).Resize(, 11) 'matrice, plus rapis
    For i = 3 To UBound(tablo)
        s = Split(tablo(i, 1), " - ")
        tablo(i, 2) = Right(s(9), 16)
        tablo(i, 3) = CDate(Left(s(9), 8))
        tablo(i, 6) = Trim(Split(s(0), ":")(1))
        tablo(i, 8) = s(2)
        tablo(i, 10) = Trim(Split(s(0), ":")(0))
    Next
    .Value = tablo 'restitution
End With
End Sub
J'attends toujours les explications pour les numéros de téléphone.

Bonne nuit.
a Gérard, toujurs là ... Encore merci :)
Je regarde...
Bonne nuit :)
 

job75

XLDnaute Barbatruc
Avant d'aller dormir.

Si l'on veut copier uniquement la cellule active de la feuille "Appels" ce n'est guère plus compliqué :
VB:
Private Sub Worksheet_Activate()
Dim tablo, i&, s
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si des recherches n'aboutissent paz
Rows("3:" & Rows.Count).Delete 'RAZ
Sheets("Appels").Activate
If ActiveCell.Row > 2 And ActiveCell.Column = 15 Then [A3] = ActiveCell 'copie la valeur
Me.Activate
With Me.UsedRange
    .WrapText = True 'renvoi à la ligne
    .Rows.AutoFit 'ajustement hauteur
    tablo = .Columns(1).Resize(, 11) 'matrice, plus rapis
    For i = 3 To UBound(tablo)
        s = Split(tablo(i, 1), " - ")
        tablo(i, 2) = Right(s(9), 16)
        tablo(i, 3) = CDate(Left(s(9), 8))
        tablo(i, 6) = Trim(Split(s(0), ":")(1))
        tablo(i, 8) = s(2)
        tablo(i, 10) = Trim(Split(s(0), ":")(0))
    Next
    .Value = tablo 'restitution
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
 

Pièces jointes

  • 02 Appels vers transfert.xlsm
    37.5 KB · Affichages: 5

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Avant d'aller dormir.

Si l'on veut copier uniquement la cellule active de la feuille "Appels" ce n'est guère plus compliqué :
VB:
Private Sub Worksheet_Activate()
Dim tablo, i&, s
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si des recherches n'aboutissent paz
Rows("3:" & Rows.Count).Delete 'RAZ
Sheets("Appels").Activate
If ActiveCell.Row > 2 And ActiveCell.Column = 15 Then [A3] = ActiveCell 'copie la valeur
Me.Activate
With Me.UsedRange
    .WrapText = True 'renvoi à la ligne
    .Rows.AutoFit 'ajustement hauteur
    tablo = .Columns(1).Resize(, 11) 'matrice, plus rapis
    For i = 3 To UBound(tablo)
        s = Split(tablo(i, 1), " - ")
        tablo(i, 2) = Right(s(9), 16)
        tablo(i, 3) = CDate(Left(s(9), 8))
        tablo(i, 6) = Trim(Split(s(0), ":")(1))
        tablo(i, 8) = s(2)
        tablo(i, 10) = Trim(Split(s(0), ":")(0))
    Next
    .Value = tablo 'restitution
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Merci Gérard :)
C'est bien celui-là qui copie la cellule active dont j'ai besoin.
Je regarde plus avant...
:)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard :), Bonjour Le Forum :)

Réveillé un peu tôt, j'ai regardé et bien sûr ton code fonctionne bien.

Dans mon fichier de travail, le code dont j'ai besoin sera inséré dans un code existant qui sera en cours d'exécution, genre :
Sub Gérard()
début de mon code
code d'écriture dans la feuille "RdV_transfert TEST
fin de mon code
End Sub

C'est pourquoi il me faut écrire dans la feuille "RdV_transfert TEST tout en restant sur ma feuille "Appels" et sur ma cellule active (je m'en sers pour terminer l'exécution de mon code).

Toujours dans mon fichier de travail
Il faudrait que l'écriture dans dans la feuille "RdV_transfert TEST se face Sous dernière cellule NON VIDE.

Si c'est possible, il me semble que pour les n° de téléphone, je pourrai compléter (enfin je crois lol :))
:)
 

Discussions similaires

Réponses
12
Affichages
306

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin