"rechercher" et "decaler" dans une macro

campamanu

XLDnaute Nouveau
Bonjour
Je viens de m'inscrire dans ce forum et voici ma premiere question.
Je recupère d'un logiciel de CAO une liste contenant les caracteristiques des éléments selectionnés sur le dessin. Cette liste contient des surfaces, volumes, longueurs ...etc. Je souhaite pouvoir décaler de 2 cellules les lignes de la caractéristique qui m'interèsse afin de calculer le total. Je n'ai pa reussi a intégrer dans une macro la fonction "recherche" d'Excel. je joins le fichier d'origine ainsi que le fichier que je souhaite obtenir automatiquement.

merci d'avance
Campamanu
 

Pièces jointes

  • plancher_ap_modif.xls
    5.5 KB · Affichages: 105
  • plancher_origine.xls
    5.2 KB · Affichages: 68
  • plancher_origine.xls
    5.2 KB · Affichages: 77
  • plancher_origine.xls
    5.2 KB · Affichages: 72

Gorfael

XLDnaute Barbatruc
Re : "rechercher" et "decaler" dans une macro

campamanu à dit:
Bonjour
Je viens de m'inscrire dans ce forum et voici ma premiere question.
Je recupère d'un logiciel de CAO une liste contenant les caracteristiques des éléments selectionnés sur le dessin. Cette liste contient des surfaces, volumes, longueurs ...etc. Je souhaite pouvoir décaler de 2 cellules les lignes de la caractéristique qui m'interèsse afin de calculer le total. Je n'ai pa reussi a intégrer dans une macro la fonction "recherche" d'Excel. je joins le fichier d'origine ainsi que le fichier que je souhaite obtenir automatiquement.

merci d'avance
Campamanu
Salut
Une réponse perso par macro :
Code:
Sub test()
Dim Cel As Range
For Each Cel In Range([C1], [C65536].End(xlUp))
    Select Case Right(Cel, 1)
        Case "m"
            Cel.Offset(0, 2) = Cel
            Cel.ClearContents
        Case Chr(178)
            Cel.Offset(0, 2) = Cel
            Cel = Cel.Offset(0, -1)
            Cel.Offset(0, -1).ClearContents
        Case Chr(179)
            Cel.Offset(0, 2) = Cel
            Cel.Offset(0, 1) = Cel.Offset(0, -1)
            Cel.ClearContents
            Cel.Offset(0, -1).ClearContents
    End Select
Next Cel
End Sub
Ouais, je sais, je ne répond pas exactement à la question, mais c'est comme ça, Na :p !
sinon, si tu veux, tu peux utiliser Insert Shift:=xlToRight :
Code:
Sub test()
Dim Cel As Range
For Each Cel In Range([C1], [C65536].End(xlUp))
    Select Case Right(Cel, 1)
        Case Chr(178)
            Cel.Insert Shift:=xlToRight 
        Case Chr(179)
            Cel.Insert Shift:=xlToRight 
            Cel.Insert Shift:=xlToRight 
    End Select
Next Cel
End Sub
Mais c'est moins plus mieux bien :p
A+
EDIT : j'ai modifié Case Chr(178), "2" parce que tu as des déniomation de postes et un chiffre 2 ou 3 peut terminer un texte en colonne C
 
Dernière édition:

campamanu

XLDnaute Nouveau
Re : "rechercher" et "decaler" dans une macro

Merci Messieurs

Gorfeal, merci pour ta macro mais Pierrejean a une solution plus automatique.
Pierrejean, je vois ce qui peut être fait avec le VBA et c'est génial.
Ce que tu as fais sur mon fichier correspond exactement a ce que recherche.
En cliquant sur un bouton, on choisit un texte qui est répété sur plusieurs ligne, sur la 1er colonne est le décalage se fait.
Petit problème, comment fait on pour sortir ce petit programme du fichier Excel pour l'utiliser sur d'autres fichier ? Et oui, je n'ai jamais utilisé le VBA.:eek:
J'ai réussi à ouvrir l'éditeur Visual_basic mais j'ai pas tout compris. Que dois je modifier si je veux un decalage de 2 cellules au lieu d'une seule ?
Merci encore
Campamanu
 

bqtr

XLDnaute Accro
Re : "rechercher" et "decaler" dans une macro

Bonjour campamanu, pierrejean, Gorfael

pierrejean n'étant plus là, je me permet de répondre à sa place.

Pour le décallage de deux colonnes modifie cette ligne :
Code:
Range(lesadresses(n)).Offset(0, 1).Select

par
Code:
Range(lesadresses(n)).Offset(0, 2).Select

La propriété Offset(ligne,colonne) permet de faire un décallage à droite, gauche, en haut ou en bas suivant la cellule de départ.

Tu peux aussi "geler" l'écran en rajoutant ceci au début de la macro:
Code:
[COLOR=Navy]Application.ScreenUpdating = False[/COLOR]
With ActiveSheet.Range("A1:A" & ActiveSheet.Range("A65536").End(xlUp).Row)

et ceci à la fin :
Code:
Next n
[COLOR=Navy]Application.ScreenUpdating = True[/COLOR]
End Sub

Pour exporter/importer les codes dans un autre fichier fait comme ceci :

Exportation :

-Ouvre VBA (Alt + F11)
-Dans la partie en haut à gauche, repère le nom de ton project:
VBAProject(plancher_origine.xls)
-click sur le + en face de Feuilles
-click droit sur UserForm1 et Exporter un fichier, sélectionne un dossier vide pour l'exportation et valide. Dans ce dossier tu auras deux fichiers nommés :
UserForm1.frm et UserForm1.frx
-retourne dans le project VBA et click sur le + devant Modules
-click droit sur Module1 et Exporter un fichier, sélectionne le même dossier que tout à l'heure et valide. Un fichier Module1.bas sera rajouté.

Pour importer dans un autre fichier, ouvre le et ensuite ouvre VBA, dans le menu Fichier, sélectionne Importer un fichier, choisit le dossier où tu as exporté et click sur le fichier UserForm1.frm puis valide.

Recommence la même chose (Menu Fichier, Importer un fichier) et click sur le fichier Module1.bas.

Voilà, voilà

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 398
Messages
2 088 072
Membres
103 709
dernier inscrit
amin Saadaoui