Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/09/2011, 01h51   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Par défaut Sélection de plage à la souris et glissé de formule

Bonjour à tous,
Je me permets de revenir sur ce forum, car la dernière fois vous m'avez bien aidé !
Aujourd'hui mon problème c'est que je voudrais faire un code à partir de deux codes que j'ai eu sur internet. (Compiler un hamburger quoi^^)
Pour commencer je vous explique le but de ma macro.
1. Appuyer sur mon bouton lié à ma macro (ça je sais faire)
2. Une boite de dialogue qui s'ouvre et qui me demande de sélectionner une cellule ou une plage.
3. Glisser la formule (contenue dans la plage précédemment sélectionnée jusqu'à la dernière ligne de la colonne d'à côté
Je vous copie les deux codes que j'ai trouvé :

Le premier :

Permet de sélectionner une plage avec la souris (Méthode InputBox)
Code :
1
2
3
4
5
6
7
 
Permet de sélectionner une plage avec la souris (Méthode InputBox)
Sub SelectionPlageAvecSouris()
      Dim Plage As Range
      Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
      MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
End Sub
Le deuxième

Permet de faire glisser les formules jusqu'à la fin de la colonne d'à coté.

Code :
1
2
Range("D2:G2").Select
Selection.AutoFill Destination:=Range("D2:G" & Range("D65536").End(xlUp).Row)
Voilà j'espère avoir étais claire

Bonne soirée à vous.
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 09h07   #2
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Je ne sais pas si c'est ce que tu cherche mais teste pour voir :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Sub SelectionPlageAvecSouris()
 
    Dim Plage As Range
 
    Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
 
    Range(Plage, Plage.Offset(0, 1)).AutoFill _
          Plage.Resize(Plage.Rows.Count + Cells(Rows.Count, Plage.Column + 1).End(xlUp).Row _
          - Plage.Rows.Count, Plage.Columns.Count + 1)
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 09h19   #3
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Avec gestion abandon saisie :

Code :
1
2
3
4
5
6
7
8
9
  Dim r As Range
  On Error Resume Next
   Set r = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
  On Error GoTo 0
   If Not r Is Nothing Then
      r.Rows("1:2").AutoFill r
    Else
      MsgBox "Aucune plage sélectionnée", vbCritical
    End If
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/09/2011, 14h25   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Bonjour, à vous

Merci pour cette réponse rapide !

Alors j'ai regardé un peu les codes.

Alors pour le premier de Thèze :

j'ai fait un copier-coller de la macro cela n'a pas l'air de marcher en l'état.
J'ai essayé de comprendre le code mais en vain... désoler pour mon petit cerveau étriquer

Et pour le deuxième:

pareil j'ai copié le code, ça marche mais j'aimerais apporter une petite amélioration.
Pour ce code il faut que je sélectionne la plage (dans la boite de dialogue) où les formules vont être glissées :

Par exemple si je veux glisser la B1 jusqu'à B1000 je dois sélectionner la plage "B1: B1000"
Serait-il possible de modifier le code pour que je sélectionne uniquement B où la plage qui contient les formules et ensuite que la macro se base sur la colonne d'à côté, dans cet exemple la colonne A, pour glisser les cellules?

En gros la macro se dit bonne alors une cellule en B ok! Tiens Tiens la colonne "A1" va jusqu'à A1000! Bon! OK! je glisse la formule qui est en B1 (ou B1:F1) jusqu'à B1000 (où B1000:F1000)!!

P.S : Et si la plage sélectionner et discontinu du type : D4: D13;F4:F13 ?

Merci beaucoup pour le travail fourni !

A bientot
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 16h06   #5
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Re,

J'ai rendu un poil plus simple la macro (enfin tout est relatif), il faut dire que j'avais mal interprété ta requête.
Tu sélectionne A1 où se trouve la formule à faire glisser et cette dernière sera tirée jusqu'à hauteur de la dernière cellule non vide de la colonne située à droite de la sélection (pour toi la colonne B) jusqu'à A1000 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Sub SelectionPlageAvecSouris()
 
    Dim Plage As Range
    Dim L As Long
 
    Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
 
    'recherche la dernière cellule non vide dans la colonne située à droite de la sélection
    'et retourne le numéro de la ligne
    L = Cells(Rows.Count, Plage.Column + 1).End(xlUp).Row
 
    'Recopie la formule jusqu'à hauteur de la dernière cellule de la colonne située à droite
    'de la sélection
    Plage.AutoFill Plage.Resize(Plage.Rows.Count + L - Plage.Rows.Count, Plage.Columns.Count)
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/09/2011, 17h22   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Salut Hervé,
Alors j'ai testé ça marche nickel !
Merci beaucoup de ton aide

Je vais essayer maintenant de faire en sorte que le code gère des plages non contiguës ^^

Faudra modifier cette ligne je pense :

Code :
L = Cells(Rows.Count, Plage.Column - 1).End(xlUp).Row
Je vais essayer ça aujourd'hui ou demain, donc je pense revenir vous demandez de l'aide la semaine prochaine hé hé

Encore merci en tout les cas !!
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h32.


 
 
 
 
Partenaires

Hébergement Web